Thread Net::SSH2 mit IO::Socket::INET6
(3 answers)
Opened by Jejerod at 2012-06-22 15:08
Long time, no see.
Kürzlich habe ich eine Anwendung die ![]() ![]() Für die IPv6 Integration habe ich folglich einen ![]() Problem: Bei größeren zu übertragenden Datenmengen nimmt Net::SSH2::Channel->write() zwar alles an, aber es kommt nicht alles auf der anderen Seite an. Bei um und bei 4600 Bytes meldet der Server einen timeout, der Client schickt munter weiter. Verwendet wird (leider) ![]() Kann es sein das non-blocking IO hier nicht sauber implementiert wurde, oder habe ich da einen Fehler gemacht? Snippets: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 sub channel_write { my ($self,$message) = @_; return 0 if (! defined $self->{channel}); eval { my $_msglen = length($message); my $_written = 0; alarm 10; my $_msgsend = $self->{channel}->write($message); return 0 if (! defined $_msgsend); $_written += $_msgsend; while ($_written < $_msglen) { # not completely xmitted my $_todo = substr($message,$_written); $_msgsend = $self->{channel}->write($_todo); return 0 if (! defined $_msgsend); $_written += $_msgsend; } alarm 0; }; return 0 if ($@); return 1; } Diese Funktion sollte bei blocking(0) meckern wenn es timeouts gibt. Sie akzeptiert aber alles was ich ihr übergebe und davon kommt trotzdem nicht alles an. Das ganze funktioniert problemlos mit IPv4. |