phpbar.de logo

Mailinglisten-Archive

[php] feof() Reaktionszeit bei Socket-Connects

[php] feof() Reaktionszeit bei Socket-Connects

Andreas Demmer php at andreas-demmer.de
Don Mar 10 10:28:50 CET 2005


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

-- 
http://www.andreas-demmer.de


php::bar PHP Wiki   -   Listenarchive