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