Philipp Hasenfratz: Sockets... HTTP... Proxi... ARGHHH!

Beitrag lesen

Halihallo Forumer

Mein Thread ist leider bereits ins Archiv gerutscht und ist dort noch nicht auffindbar (aus bekannten Gründen), also erstmal Entschuldigung, dass ich nach so kurzer Zeit schon wieder damit anfange, aber das Problem geht mir gewaltig auf die Nerven und ich will schnellstmöglich eine Lösung finden, sonst werd ich noch wahnsinnig ;-)

Es geht um einen HTTP oder Proxi-Dienst. Ein Prog hängt sich an einen Port (80, 8080) und soll die Requests bearbeiten. Funktioniert alles toll. Nur...

while ( my $client = $sock->accept ) {
   xxx
}

bei xxx hab ich so ziemlich alles ausprobiert, was ich kenne, um den ganzen HTTP-Request einzulesen... @arr = <$client>; $t = <$client>, while ( <$client> ), ... alles, alles, sogar mit $client->eof... Ich denke, dass es noch eine möglichkeit über recv oder sysread gäbe, aber das muss doch schon einfacher gehen (d. h. beides ist gleich einfach, aber ersteres "perliger"), oder?
Irgendwie erkennt mein Perl nie, wann schluss ist. Das Programm bleibt immer stehen und versuche aus dem Socket zu lesen, obwohl der Client gar nix mehr gesendet hat... Könnte es sein, dass dies mit dem Linedeliminator zu tun hat? (benutze Win => CRLF)...

Was zum h*** ist hier los??? - Was begreife ich hier nicht? - Und warum funktioniert es nur bei HTTP so; andere Socketdiskussionen hab ich ohne Probleme machen können (gar bidirektional mit mehreren Blöcken)? - Aber diese HTTP-Requests (Header _und_ Body) kann ich einfach nicht einlesen... Natürlich könnte ich last if ($line=~/^$crlf$/); machen, aber dann schneide ich mir den Content (eg. POST Formulardaten) des Requests weg und den will ich auch.

Viele Grüsse

Philpp
   --> der auf das Ende seiner Qualen hofft ;-)