From 49130dbd714032575aeb69ceb6ce301474b6dd9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Monta=C3=B1=C3=A9s=20Garc=C3=ADa?= Date: Wed, 22 Feb 2017 19:27:08 +0100 Subject: [PATCH] Proposed fix for Issue #1951. Checked with IP4. IP6 should work as wel but not checked yet. --- Engine/source/platform/platformNet.cpp | 35 ++++++++++++++++---------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/Engine/source/platform/platformNet.cpp b/Engine/source/platform/platformNet.cpp index 4d5b6ca18..a96a0d06b 100644 --- a/Engine/source/platform/platformNet.cpp +++ b/Engine/source/platform/platformNet.cpp @@ -809,7 +809,7 @@ NetSocket Net::openConnectTo(const char *addressString) error = Net::WrongProtocolType; } - if (error != NoError || error == NeedHostLookup) + if (error == NoError || error == NeedHostLookup) { handleFd = openSocket(); } @@ -823,13 +823,16 @@ NetSocket Net::openConnectTo(const char *addressString) if (socketFd != InvalidSocketHandle) { setBlocking(handleFd, false); - if (::connect(socketFd, (struct sockaddr *)&ipAddr, sizeof(ipAddr)) == -1 && - errno != EINPROGRESS) + if (::connect(socketFd, (struct sockaddr *)&ipAddr, sizeof(ipAddr)) == -1) { - Con::errorf("Error connecting %s: %s", - addressString, strerror(errno)); - closeSocket(handleFd); - handleFd = NetSocket::INVALID; + Net::Error err = PlatformNetState::getLastError(); + if (err != Net::WouldBlock) + { + Con::errorf("Error connecting to %s: %u", + addressString, err); + closeSocket(handleFd); + handleFd = NetSocket::INVALID; + } } } else @@ -849,14 +852,20 @@ NetSocket Net::openConnectTo(const char *addressString) sockaddr_in6 ipAddr6; NetAddressToIPSocket6(&address, &ipAddr6); SOCKET socketFd = PlatformNetState::smReservedSocketList.activate(handleFd, AF_INET6, false, true); - if (::connect(socketFd, (struct sockaddr *)&ipAddr6, sizeof(ipAddr6)) == -1 && - errno != EINPROGRESS) + if (socketFd != InvalidSocketHandle) { setBlocking(handleFd, false); - Con::errorf("Error connecting %s: %s", - addressString, strerror(errno)); - closeSocket(handleFd); - handleFd = NetSocket::INVALID; + if (::connect(socketFd, (struct sockaddr *)&ipAddr6, sizeof(ipAddr6)) == -1) + { + Net::Error err = PlatformNetState::getLastError(); + if (err != Net::WouldBlock) + { + Con::errorf("Error connecting to %s: %u", + addressString, err); + closeSocket(handleFd); + handleFd = NetSocket::INVALID; + } + } } else {