From fbe6468ee26ff4c5df68d37d8b1b819e68d589a0 Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 26 Aug 2006 10:18:31 +0000 Subject: [PATCH] Cleanups to reduce dependency on Windows SFTP tools always having a real network socket. git-svn-id: svn://svn.tartarus.org/sgt/putty@6804 cda61777-01e9-0310-a592-d414129be87e --- windows/winsftp.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/windows/winsftp.c b/windows/winsftp.c index 21188978..f0f0e304 100644 --- a/windows/winsftp.c +++ b/windows/winsftp.c @@ -463,38 +463,39 @@ extern int select_result(WPARAM, LPARAM); int do_eventsel_loop(HANDLE other_event) { - int n, nhandles, nallhandles; + int n, nhandles, nallhandles, netindex, otherindex; long next, ticks; HANDLE *handles; SOCKET *sklist; int skcount; long now = GETTICKCOUNT(); - if (!netevent) { - return -1; /* doom */ + if (run_timers(now, &next)) { + ticks = next - GETTICKCOUNT(); + if (ticks < 0) ticks = 0; /* just in case */ + } else { + ticks = INFINITE; } handles = handle_get_events(&nhandles); handles = sresize(handles, nhandles+2, HANDLE); nallhandles = nhandles; - handles[nallhandles++] = netevent; + if (netevent) + handles[netindex = nallhandles++] = netevent; + else + netindex = -1; if (other_event) - handles[nallhandles++] = other_event; - - if (run_timers(now, &next)) { - ticks = next - GETTICKCOUNT(); - if (ticks < 0) ticks = 0; /* just in case */ - } else { - ticks = INFINITE; - } + handles[otherindex = nallhandles++] = other_event; + else + otherindex = -1; n = MsgWaitForMultipleObjects(nallhandles, handles, FALSE, ticks, QS_POSTMESSAGE); if ((unsigned)(n - WAIT_OBJECT_0) < (unsigned)nhandles) { handle_got_event(handles[n - WAIT_OBJECT_0]); - } else if (n == WAIT_OBJECT_0 + nhandles) { + } else if (netindex >= 0 && n == WAIT_OBJECT_0 + netindex) { WSANETWORKEVENTS things; SOCKET socket; extern SOCKET first_socket(int *), next_socket(int *); @@ -564,7 +565,7 @@ int do_eventsel_loop(HANDLE other_event) now = GETTICKCOUNT(); } - if (other_event && n == WAIT_OBJECT_0 + nhandles + 1) + if (otherindex >= 0 && n == WAIT_OBJECT_0 + otherindex) return 1; return 0; @@ -581,14 +582,14 @@ int do_eventsel_loop(HANDLE other_event) */ int ssh_sftp_loop_iteration(void) { - if (sftp_ssh_socket == INVALID_SOCKET) - return -1; /* doom */ - if (p_WSAEventSelect == NULL) { fd_set readfds; int ret; long now = GETTICKCOUNT(); + if (sftp_ssh_socket == INVALID_SOCKET) + return -1; /* doom */ + if (socket_writable(sftp_ssh_socket)) select_result((WPARAM) sftp_ssh_socket, (LPARAM) FD_WRITE); -- 2.11.0