summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler_socket.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2002-07-05 18:26:23 +0000
committerCorinna Vinschen <corinna@vinschen.de>2002-07-05 18:26:23 +0000
commitd5591d9df67a1425a8c05f22cbde430c4a93627f (patch)
tree96201f8ba2ad69fb41b3dd47a170d65c62f59fd5 /winsup/cygwin/fhandler_socket.cc
parent89ffbd66e7747dd3719b1252e4037805385c8237 (diff)
downloadcygnal-d5591d9df67a1425a8c05f22cbde430c4a93627f.tar.gz
cygnal-d5591d9df67a1425a8c05f22cbde430c4a93627f.tar.bz2
cygnal-d5591d9df67a1425a8c05f22cbde430c4a93627f.zip
* fhandler.h (UNCONNECTED): New define.
(CONNECT_PENDING): Ditto. (CONNECTED): Ditto. (class fhandler_socket): Add member `had_connect_or_listen'. Add member functions `is_unconnected', `is_connect_pending' and `is_connected'. * fhandler_socket.cc (fhandler_socket::connect): Set member `had_connect_or_listen' according to return code of WinSock call. (fhandler_socket::listen): Ditto. * net.cc (cygwin_getsockopt): Modify SO_ERROR return value in case of socket with pending connect(). * select.cc (peek_socket): Only add socket to matching fd_set if it's not "ready". Call WINSOCK_SELECT only if at least one socket is in one of the fd_sets. (start_thread_socket): Only add socket to matching fd_set if it's not "ready". (fhandler_socket::select_write): Set write_ready to true also if socket isn't connected or listening.
Diffstat (limited to 'winsup/cygwin/fhandler_socket.cc')
-rw-r--r--winsup/cygwin/fhandler_socket.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc
index 7970e4b63..e95655510 100644
--- a/winsup/cygwin/fhandler_socket.cc
+++ b/winsup/cygwin/fhandler_socket.cc
@@ -455,6 +455,10 @@ fhandler_socket::connect (const struct sockaddr *name, int namelen)
}
}
+ if (!res)
+ had_connect_or_listen = CONNECTED;
+ else if (WSAGetLastError () == WSAEINPROGRESS)
+ had_connect_or_listen = CONNECT_PENDING;
return res;
}
@@ -464,6 +468,8 @@ fhandler_socket::listen (int backlog)
int res = ::listen (get_socket (), backlog);
if (res)
set_winsock_errno ();
+ else
+ had_connect_or_listen = CONNECTED;
return res;
}