tor 2012-03-01 klockan 22:39 +0100 skrev Peter Stuge:
> This
> might already be managed within libssh2 though, that keepalives are
> never sent in the middle of another request.
In blocking mode keepalives are by default sent in the middle of other
requests by _libssh2_wait_socket.
And applications is very likely to do use libss2_keepalive_send in
similar manner in non-blocking mode.
Also be warned that libssh2_keepalive_send corrupts transport if only
part of the keep-alive message can be sent.
> I don't think an SSH client can allow itself to send a global request
> with want reply = 0 if it is not already sure that the server
> supports that particular request, unless the client adds some
> elaborate buffering of global requests it has sent and tries to track
> which ones have been answered by the server. Not what we want.
You only need to track the sequence number of the pending packets you
currently expect a response to. Getting UNIMPLEMENTED as response to a
packet you are not expecting a response to can safely be ignored I
think.
It's not really about global requests as such. You may in theory see
UNIMPLEMENTED as response to any packet. In this specific case it's seen
because global channel requests (keep-alive) are sent before the
connection protocol is activated.
> I think want reply = 1 for keepalive would be fine, and isolates the
> problem to that part of the code.
Not really without also making keep-alives a round-trip blocking thing
preventing any concurrent unanswered packets of any kind during the
keep-alive probe, which I am sure is not fine.
Regards
Henrik
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
Received on 2012-03-01