Mailinglisten-Archive |
Michael Hansen wrote: > Hallo Yannik, > > danke für diesen Ansatz. Also laut Manual liest fread solange bis die > angegebene Anzahl an Bytes _oder_ ein EOF gelesen wird. > > Selbst PEARs Net_Socket verwendet fsockopen, fread und prüft auf EOF. Meinst > nicht das Problem liegt woanders? Mit blocking habe ich auch schon > rumgespielt. Das es am blocken liegt ist nur eine Vermutung. Es kann durchaus an etwas anderem liegen. Aber die Möglichkeit mit dem Blocken liegt sehr nahe und ich habe auch keine andere Idee. Immerhinhängt dein script am letzten fread() und es dauert ziemlich genau 60 Sekunden. Was soll es sonst sein? Ich würde aber einfach mal vermuten, das kein EOF gelesen wird, obwohl du längst alle deine benötigten Daten hast. Das ganze bringt mich zur Vermutung, dass du dich möglicherweise mit persistenten Verbindungen rumärgerst: " A significant difference between HTTP/1.1 and earlier versions of HTTP is that persistent connections are the default behavior of any HTTP connection. That is, unless otherwise indicated, the client SHOULD assume that the server will maintain a persistent connection, even after error responses from the server." Um zu verhindern, dass du eine persistente Verbindung bekommst: " An HTTP/1.1 server MAY assume that a HTTP/1.1 client intends to maintain a persistent connection unless a Connection header including the connection-token "close" was sent in the request." Oder du implementierst die Erkennung einer fertig übertragenen Seite (der Abschnitt ist was länger, den copy und paste ich mal nicht): http://www.faqs.org/rfcs/rfc2616.html Section "4.4 Message Length". > > Ich sollte noch dazu sagen, dass die gleiche Funktion mit einem GET-Request > statt POST problemlos klappt. Sorry, das hab ich vergessen zu erwähnen. Das ist zwar etwas störend, aber vielleicht hängt das mit deinem Server zusammen. Immerhin hat der Server die Freiheit die Verbindung zu schliessen. Yannik > > > Yannik Hampe wrote: > > [...] > >> ohne jetzt deinen Quelltext gelesen zu haben kombiniere ich folgendes >> Problem: >> - fread() liest solange, bis genug daten vorhanden sind. >> - sind nicht genug Daten vorhanden, blockt fread(), bis Daten vorhanden >> sind, was nie der Fall ist >> - Nach 60 Sekunden wird phps socket timeout aktiv und killt die >> Verbindung. Dein Script läuft weiter. >> >> Es sollte dir helfen die socket_*-Funktionen zu verwenden statt fsockets. >> Ausserdem könnte dir stream_set_blocking helfen. >> >> Yannik >
php::bar PHP Wiki - Listenarchive