Proposed fix for Issue #1951. Checked with IP4. IP6 should work as wel but not checked yet.

This commit is contained in:
Francisco Montañés García 2017-02-22 19:27:08 +01:00
parent 8684cd1a65
commit 49130dbd71

View file

@ -809,7 +809,7 @@ NetSocket Net::openConnectTo(const char *addressString)
error = Net::WrongProtocolType; error = Net::WrongProtocolType;
} }
if (error != NoError || error == NeedHostLookup) if (error == NoError || error == NeedHostLookup)
{ {
handleFd = openSocket(); handleFd = openSocket();
} }
@ -823,13 +823,16 @@ NetSocket Net::openConnectTo(const char *addressString)
if (socketFd != InvalidSocketHandle) if (socketFd != InvalidSocketHandle)
{ {
setBlocking(handleFd, false); setBlocking(handleFd, false);
if (::connect(socketFd, (struct sockaddr *)&ipAddr, sizeof(ipAddr)) == -1 && if (::connect(socketFd, (struct sockaddr *)&ipAddr, sizeof(ipAddr)) == -1)
errno != EINPROGRESS)
{ {
Con::errorf("Error connecting %s: %s", Net::Error err = PlatformNetState::getLastError();
addressString, strerror(errno)); if (err != Net::WouldBlock)
closeSocket(handleFd); {
handleFd = NetSocket::INVALID; Con::errorf("Error connecting to %s: %u",
addressString, err);
closeSocket(handleFd);
handleFd = NetSocket::INVALID;
}
} }
} }
else else
@ -849,14 +852,20 @@ NetSocket Net::openConnectTo(const char *addressString)
sockaddr_in6 ipAddr6; sockaddr_in6 ipAddr6;
NetAddressToIPSocket6(&address, &ipAddr6); NetAddressToIPSocket6(&address, &ipAddr6);
SOCKET socketFd = PlatformNetState::smReservedSocketList.activate(handleFd, AF_INET6, false, true); SOCKET socketFd = PlatformNetState::smReservedSocketList.activate(handleFd, AF_INET6, false, true);
if (::connect(socketFd, (struct sockaddr *)&ipAddr6, sizeof(ipAddr6)) == -1 && if (socketFd != InvalidSocketHandle)
errno != EINPROGRESS)
{ {
setBlocking(handleFd, false); setBlocking(handleFd, false);
Con::errorf("Error connecting %s: %s", if (::connect(socketFd, (struct sockaddr *)&ipAddr6, sizeof(ipAddr6)) == -1)
addressString, strerror(errno)); {
closeSocket(handleFd); Net::Error err = PlatformNetState::getLastError();
handleFd = NetSocket::INVALID; if (err != Net::WouldBlock)
{
Con::errorf("Error connecting to %s: %u",
addressString, err);
closeSocket(handleFd);
handleFd = NetSocket::INVALID;
}
}
} }
else else
{ {