Thank you very much for your quick response, Peter, I greatly appreciate it!
If the line I've added to sftp_write_nonblock.c ... libssh2_trace (session, ~0); ... doesn't enable transport layer tracing, could you please let me know how I would go about this? I've looked at the code some more. So the code example sftp_write_nonblock.c is calling the function libssh2_sftp_init() (in libSSH2's sftp.c) where libssh2_sftp_init() calls sftp_init(). In sftp_init() I'm getting to this snippet: if(session->sftpInit_state == libssh2_NB_state_sent2) { /* sent off what's left of the init buffer to send */ rc = _libssh2_channel_write(session->sftpInit_channel, 0, session->sftpInit_buffer + session->sftpInit_sent, 9 - session->sftpInit_sent); Moving on into _libssh2_channel_write() it appears that there are nine bytes to send, as mentioned in the last line of the debug output "Writing 9 bytes on channel 0/0, stream #0". In _libssh2_channel_write() I get to this point: /* drain the incoming flow first, mostly to make sure we get all * pending window adjust packets */ do rc = _libssh2_transport_read(session); while(rc > 0); _libssh2_transport_read() eventually calls _libssh2_recv() where things get stuck inside the call to recv(). The question I have is why - if there is no inbound data to "drain" - recv() doesn't return with SOCKET_ERROR and WSAEWOULDBLOCK. Is the socket created in "sftp_write_nonblock.c" for any purpose or any period of time used in blocking mode?
_______________________________________________ libssh2-devel https://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel