From f0cf4991e2bd0e618c7020511fb12cb0b5c59a40 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Mon, 14 May 2007 09:21:09 +0000 Subject: [PATCH] Apply patch from "dnk" making sockets non-blocking under Windows. --- src/net_socket.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/net_socket.c b/src/net_socket.c index c2a6859..149b0d3 100644 --- a/src/net_socket.c +++ b/src/net_socket.c @@ -62,6 +62,12 @@ static void configure_tcp(connection_t *c) if(fcntl(c->socket, F_SETFL, flags | O_NONBLOCK) < 0) { logger(LOG_ERR, _("fcntl for %s: %s"), c->hostname, strerror(errno)); } +#elif defined(WIN32) + unsigned long arg = 1; + + if(ioctlsocket(c->socket, FIONBIO, &arg) != 0) { + logger(LOG_ERR, _("ioctlsocket for %s: WSA error %d"), c->hostname, WSAGetLastError()); + } #endif #if defined(SOL_TCP) && defined(TCP_NODELAY) @@ -160,6 +166,16 @@ int setup_vpn_in_socket(const sockaddr_t *sa) return -1; } } +#elif defined(WIN32) + { + unsigned long arg = 1; + if(ioctlsocket(nfd, FIONBIO, &arg) != 0) { + closesocket(nfd); + logger(LOG_ERR, _("Call to `%s' failed: WSA error %d"), "ioctlsocket", + WSAGetLastError()); + return -1; + } + } #endif option = 1; @@ -318,7 +334,11 @@ begin: result = connect(c->socket, &c->address.sa, SALEN(c->address.sa)); if(result == -1) { - if(errno == EINPROGRESS) { + if(errno == EINPROGRESS +#if defined(WIN32) && !defined(O_NONBLOCK) + || WSAGetLastError() == WSAEWOULDBLOCK +#endif + ) { c->status.connecting = true; return; } -- 2.25.1