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
Mon Mar 12 15:24:25 CET 2007


Hi,

ich habe eine Client - Server Verbindung mit php �ber ssh, die im LAN
wunderbar funktioniert. Es k�nnen Strings z.B. mit strlen > 4000
�bertragen werden, da gibt es �berhaupt keine Probleme.
Jetzt sollen damit zwei Rechner verbunden werden, die jeweils per DSL im
Inet sind (z.B. in Berlin und M�nchen).
Die �bertragung funktioniert an sich auch immer noch, nur dass �ber das
Inet nicht mehr alle Daten �bertragen werden.
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.

Ich habe keine Ahnung warum das im LAN funktioniert und �ber das Inet nicht.
Die MTU kanns irgendwie nicht sein, denn die ist im LAN ja genauso gro�
(1500 auf meinen Linux-Kisten wo es intern funktioniert).

Es funktioniert z.B. auch, wenn der php-Server auf meinem root-Server
l�uft (also permanente Verbindung + feste IP) und der Client von einer
DSL-Einwahlverbindung kommt, hier werden auch alle Daten �bertragen.
Nur wenn der php-Server auf einem Rechner l�uft, der per DSL angebunden
ist, gibts diese Probleme.

Ich hab mir schon die Finger wund gesucht, vielleicht hat ja jemand einen
Tip - �bersehe ich vielleicht etwas wichtiges in Bezug auf Inet?

Hab das hier gefunden(2. note):
http://de.php.net/manual/en/function.stream-set-blocking.php

Kann das aber irgendwie nicht auf mein Problem umw�lzen, denn im Client
$r = array( $tunnel );
while ( 0 !== stream_select( $r, $w = null, $e = null, 0 ) )
...
ergibt:
Warning: stream_select(): cannot represent a stream of type SSH2 Channel
as a select()able descriptor in ...


So ist grundlegend der Client aufgebaut:
...
$connection = ssh2_connect( REMOTE_IP, SSH_PORT );
$auth_password = ssh2_auth_password( $connection, SSH_USER, SSH_PASS );
$tunnel = ssh2_tunnel( $connection, REMOTE_IP, IMOD_PORT );
$fwrites_success = fwrite( $tunnel, $string, strlen( $string ) );
...

Und so der Server:
...
$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
   {
      // MAXBUFSIZE = 20000
      $buf = socket_read( $msgsock, MAXBUFSIZE );
      ...
   } while ( true )
} while ( true )
...


Ich hoffe es kann mir da jemand nen Tip geben oder wei� sogar woran es liegt.
PHP-4.4.4, libssh2-0.13, (pecl) ssh2 0.10 beta  kommt zum Einsatz.

Liegt der Fehler im client oder server?

Wenn noch Infos fehlen, bitte nachfragen.
Danke Andi




php::bar PHP Wiki   -   Listenarchive