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: 
https://sourceforge.net/tracker/?func=detail&atid=703942&aid=1918953&group_id=125852

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:
[code]

cur_fd->fd.channel = 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 |
                   LIBSSH2_POLLFD_CHANNEL_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");

[/code]


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:
[code]
        libssh2_channel_set_blocking(sess_flags[I].channel,
   0); // make nonblocking
[/code]

----------------------------------------------------------------------

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

Message:
Logged In: YES 
user_id=1700690
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
Linux)
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: 
https://sourceforge.net/tracker/?func=detail&atid=703942&aid=1918953&group_id=125852

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
libssh2-devel mailing list
libssh2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libssh2-devel

Reply via email to