Mailinglisten-Archive |
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