phpbar.de logo

Mailinglisten-Archive

[php] socket Problem - strlen > 1500 nicht möglich

[php] socket Problem - strlen > 1500 nicht möglich

Andi Voss andi at andis.mine.nu
Die Mar 13 10:40:22 CET 2007


Andi Voss schrieb:

> Größer als 1499 strlen des zu übertragenen Strings geht nicht.
> Der ankommende String wird einfach bei einer strlen von 1499 auf dem
> empfangenden Server abgeschnitten bzw. es wird gar nicht erst mehr als
> 1499 in den SSH-Tunnel durch fwrite geschrieben.

> Liegt der Fehler im client oder server?

Ich kann mir die Frage mittlerweile selber beantworten.
Es lag am Server und an der allgemeinen Übertragungsgeschwindigkeit, die
im Inet natürlich langsamer ist als im lokalen Lan. Daher hat der Server
nicht lange genug auf Daten gewartet.

Mit socket_set_option musste ich entsprechend eingreifen und den Server
zum Warten zu bringen bzw. eine min. Buffer Größe zu lesen:

> ...
> $sock = socket_create( AF_INET, SOCK_STREAM, SOL_TCP );
> socket_setopt( $sock, SOL_SOCKET, SO_REUSEADDR, 1 );
> socket_set_block( $sock );
> $ret = socket_bind ( $sock, ADRESS, IMODD_PORT );
> $ret = socket_listen( $sock, 5 );
> do
> {
>    $msgsock = socket_accept( $sock );
>    do
>    {
        socket_set_option( $msgsock, SOL_SOCKET, SO_RCVTIMEO, array( "sec"
=> 0, "usec" => 800 ) );
        socket_set_option( $msgsock, SOL_SOCKET, SO_RCVLOWAT, 7000 );

>       // MAXBUFSIZE = 20000
>       $buf = socket_read( $msgsock, MAXBUFSIZE );
>       ...
>    } while ( true )
> } while ( true )
> ...


Jetzt läuft wieder alles bestens.
Vielleicht hilft es ja jemandem.

Gruss Andi


php::bar PHP Wiki   -   Listenarchive