summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorattilamolnar <attilamolnar@hush.com>2012-09-13 01:53:42 +0200
committerattilamolnar <attilamolnar@hush.com>2012-09-13 14:16:11 +0200
commite67dff32ced4be1ec0a8539c29fd44bee9077923 (patch)
treec9d5249878228fc3007a9c58f386ac314961bc19
parent2ef3dffd4781082988ffaaab3d786733b1b96a18 (diff)
Set errno to EINPROGRESS on Windows when the connect() call does not complete immediately, to simulate unix behavior
This makes code that checks errno to determine whether connect() has succeeded or not work properly on Windows Fixes #298 reported by @butaman
-rw-r--r--src/socketengine.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/socketengine.cpp b/src/socketengine.cpp
index 72075dd49..ccaa71aed 100644
--- a/src/socketengine.cpp
+++ b/src/socketengine.cpp
@@ -208,7 +208,12 @@ int SocketEngine::SendTo(EventHandler* fd, const void *buf, size_t len, int flag
int SocketEngine::Connect(EventHandler* fd, const sockaddr *serv_addr, socklen_t addrlen)
{
- return connect(fd->GetFd(), serv_addr, addrlen);
+ int ret = connect(fd->GetFd(), serv_addr, addrlen);
+#ifdef WINDOWS
+ if ((ret == SOCKET_ERROR) && (WSAGetLastError() == WSAEWOULDBLOCK))
+ errno = EINPROGRESS;
+#endif
+ return ret;
}
int SocketEngine::Shutdown(EventHandler* fd, int how)