aboutsummaryrefslogtreecommitdiff
path: root/libssh
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2010-01-25 19:48:38 +0100
committerAris Adamantiadis <aris@0xbadc0de.be>2010-01-25 19:48:38 +0100
commitcfdd4296a8cec84ee31f4af996126b4a47cb8bc9 (patch)
treeaf2364f4af48e9b9d990572fe6bf70fcca5b5a12 /libssh
parent3407509ed72a9b387187e91e9a5274b5ef39bb88 (diff)
downloadlibssh-cfdd4296a8cec84ee31f4af996126b4a47cb8bc9.tar.gz
libssh-cfdd4296a8cec84ee31f4af996126b4a47cb8bc9.tar.xz
libssh-cfdd4296a8cec84ee31f4af996126b4a47cb8bc9.zip
Fix poll not waking up on connect on win32
Under windows, poll does not detect connected socket using POLLOUT but POLLWRNORM. "Pending connect requests are indicated in the returned revents member of WSAPOLLFD structure by POLLWRNORM." http://msdn.microsoft.com/en-us/library/ms741669%28VS.85%29.aspx However, I did not test that fix. (no windows at hands). I also don't know if the poll emulation layer works with that too.
Diffstat (limited to 'libssh')
-rw-r--r--libssh/socket.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/libssh/socket.c b/libssh/socket.c
index 96f29cb0..ea8979c1 100644
--- a/libssh/socket.c
+++ b/libssh/socket.c
@@ -188,7 +188,11 @@ int ssh_socket_pollcallback(ssh_poll_handle p, int fd, int revents, void *v_s){
}
}
}
+#ifdef _WIN32
+ if(revents & POLLOUT || revents & POLLWRNORM){
+#else
if(revents & POLLOUT){
+#endif
/* First, POLLOUT is a sign we may be connected */
if(s->state == SSH_SOCKET_CONNECTING){
ssh_log(s->session,SSH_LOG_PACKET,"Received POLLOUT in connecting state");
@@ -797,6 +801,9 @@ int ssh_socket_connect(ssh_socket s, const char *host, int port, const char *bin
s->state=SSH_SOCKET_CONNECTING;
/* POLLOUT is the event to wait for in a nonblocking connect */
ssh_poll_set_events(ssh_socket_get_poll_handle(s),POLLOUT);
+#ifdef _WIN32
+ ssh_poll_add_events(ssh_socket_get_poll_handle(s),POLLWRNORM);
+#endif
leave_function();
return SSH_OK;
}