phpbar.de logo

Mailinglisten-Archive

[php] fsockopen - Probleme

[php] fsockopen - Probleme

TheTinySteini ttt_(at)_thewall.de
Tue, 30 Jan 2001 15:47:42 +0100


Hi!

Ich bin fast am verzweifeln, vielleicht kann mir ja hier jemand helfen...

Also, ich möchte einen HL-Server abfragen (Statistiken eben). Also verbinde
ich zu Port 27015 des jeweiligen Rechners mit:
$fp = fsockopen("udp://$ip", $port, &$errno, &$errstr, 5);

Danach überprüfe ich, ob die Verbindung geklappt hat:
if ($fp)
    return $fp;
else exit;

Das ganz große Problem dabei: Es funktioniert nicht, wenn der Rechner nicht
erreichbar ist. Wenn der Rechner erreichbar ist und der HL-Server läuft,
kein Problem. Aber wenn entweder der HL-Server oder der Rechner nicht läuft,
bekomme ich trotzdem einen $fp zurück, also if($fp) wird immer ausgeführt,
auch wenn die Verbindung gar nicht zustande gekommen ist! Und hier fangen
die ganzen Probleme an:
Ich lese mit fread($fp, 4) die ersten Daten aus. Allerdings kann ich nun
nicht bestimmen, ob da tatsächlich Daten ankommen können (sprich, ob die
Verbindung besteht) oder nicht. D.h, wenn der Server antwortet, ist alles
ok, aber wenn der Server nicht antwortet, dann hängt das Skript an genau
dieser Stelle (hab ich mit syslog() ausgetestet), weil es ewig (wirklich
ewig - alle Timeouts werden ignoriert) auf die Anzahl Daten wartet, die ich
im 2. Parameter angegeben hab (in dem Fall 4 Bytes). Man kann zwar dieses
Warten mit socket_set_blocking ($fp, false) aufheben, aber dann kann es
sein, dass ich bei antwortendem Server nicht alle Daten kriege, weil er
bereits vorher aufhört zu lesen.
Also, um es nochmal auf den Punkt zu bringen: Wie kriege ich raus, ob eine
Verbindung per fsockopen() wirklich besteht? Achja, socket_get_status()
liefert auch nicht die gewünschten Ergebnisse...

Sebastian "TheTinySteini" Steinlechner




php::bar PHP Wiki   -   Listenarchive