Mailinglisten-Archive |
Andreas Demmer schrieb: > Hi, > > ich habe hier ein ärgerliches Problem beim > Kommunizieren mit einer POP3 Mailbox über einen > Socket Connect. > > Ich habe einen Sockel auf Port 110 des Mailservers > erstellt, sende meine Kommandos via fputs() auf > den Sockel und hole mir die Antwort via fgets(). > > Alles funktioniert wunderbar bis zum eigentlichen > Auslesen der E-Mail, die ich über "RETR <number>" > oder über "TOP <number> <lines>" hole. Mein Code > sieht an dieser Stelle wie folgt aus: > > $email = NULL; > > while ( !feof ( $this->connect ) ) { > $email .= fgets ( $this->connect ); > } > > Hier tritt das Problem auf, dass zwar die komplette > E-Mail ausgelesen wird, aber das FEOF nur mit erheb- > licher Verzögerung (exakt 60 Sekunden) erkannt wird. > > In meiner Testkonstellation habe ich in jedem Durch- > lauf der While-Schleife die Zeit ausgeben lassen und > nach der While-Schleife erneut. Die komplette Email > wird innerhalb einer Sekunde gesaugt, aber bis er nach > der letzen Zeile aus der While-Schleife springt, > dauert es exakt 60 Sekunden. > > Mein erster Ansatz, den socket_timeout zu kürzen, hat > nichts gebracht. Auch wundert es mich, dass 60 Sekunden > Verzögerung die max_exection_time von 30 Sekunden igno- > rieren, was ja daraufhin deuetet, dass innerhalb dieser > Zeitspanne keine Prozessorzeit verbraucht wird. > > Ein hässlicher Workaround ist, die Schleife zu verlassen > wenn zwischen den Durchläufen mehr als n Sekunden vergangen > ist. Allerdings ist dies keine Lösung die mich zufrieden > stellt. > > Wer weiß rat bzw. hilft mir auf die Sprünge? > > Gruß, > Andreas Oh oh, das kommt mir bekannt vor. Ich hatte das mal bei ner http-verbindung, weil HTTP 1.1 automatisch persistente Verbindungen nutzt. Das bedeutet, das der server die verbindung erst nach SEINEM timeout abbricht. Und da externe verbindungen nicht auf die Skript-laufzeit angerechnet werden, kann das dauern, bis das Skript endlich zuende ist. Ich habs so gelöst, das ich einen 'Connection: close' Header mitgesedet habe. Ob es sowas in POP3 gibt kann dir wohl nur ein Blick in die RFC's beantworten Gruß Andreas -- wdv Medien & Kommunikation GmbH & Co. OHG Mediendatenverarbeitung Andreas Heigl Siemensstrasse 6 61352 Bad Homburg Germany Telefon +49-(0)6172-670-185 Telefax +49-(0)6172-670-181 www.wdv.de
php::bar PHP Wiki - Listenarchive