Subject: [libssh2] [ libssh2-Bugs-1918953 ] SSH disconnect detection

[libssh2] [ libssh2-Bugs-1918953 ] SSH disconnect detection

From: <>
Date: Thu, 20 Mar 2008 19:59:42 -0700

Bugs item #1918953, was opened at 2008-03-18 19:50
Message generated for change (Comment added) made by gmiller1018
You can respond by visiting:

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: misc
Group: None
Status: Open
Resolution: None
Priority: 5
Private: No
Submitted By: Gary Miller (gmiller1018)
Assigned to: Nobody/Anonymous (nobody)
Summary: SSH disconnect detection

Initial Comment:
When using libssh2_poll with a INT max timeout and a socket disconnects there does not seem to be any response. I had expected the libssh2_poll to return with the appropriate status indication.

Status passed in as:

cur_fd-> = sess_flags[I].channel; // channel
  cur_fd->type = LIBSSH2_POLLFD_CHANNEL;
  cur_fd->events = LIBSSH2_POLLFD_POLLIN |
                   LIBSSH2_POLLFD_POLLERR |
                   LIBSSH2_POLLFD_POLLHUP |
                   LIBSSH2_POLLFD_POLLNVAL |
                   LIBSSH2_POLLFD_SESSION_CLOSED |

twait = INT_MAX; // wait forever for input or disconn.
Log_debug("Waiting in libssh2_poll");
nfound = libssh2_poll (ssh_fds, count, twait);
Log_debug("libssh2_poll returned");


there is only one socket open at the time and count is
set to 1 (in a select I would use 2). I am unsure if there is some behavior or other issue I need to consider to make this work. In past version of the library this worked but I had customized the code because of blocking behavior. This is pure latest release running on Fedora 7 using the RPM's. The connect and read and write appears to work correctly in general use but if the remote system server crashes the disconnect is not signaled so I never try to re-connect.

The socket have been set to non blocking by:
   0); // make nonblocking


>Comment By: Gary Miller (gmiller1018)
Date: 2008-03-20 22:59

Logged In: YES
Originator: YES

After further investigation there are a number of problems.
1.) If HAVE_POLL and HAVE_SELECT are both true then select will never be
used. I put a #undef HAVE_POLL to address this.
2.) To have the select return when the socket disconnect the select calls
need to have select(maxfds +1 ...)
3.) The loop reading data till complete does not set anything that
indicates the socket has closed because of the way it checks
    for a WOULD_BLOCK error (using the Windows terminology, I am using
4.) The code in the libssh2_poll for the select would not set the correct
status to indicate the socket was closed.


You can respond by visiting:

This email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
libssh2-devel mailing list
Received on 2008-03-21