1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-17 00:33:33 +00:00

Fixed subtle issue with socket() on some distros

This commit is contained in:
Bryan Roe
2021-12-12 23:33:12 -08:00
parent 6d76fee0d9
commit 5d248c683e
2 changed files with 18 additions and 7 deletions

View File

@@ -963,7 +963,7 @@ void ILibAsyncSocket_ConnectTo(void* socketModule, struct sockaddr *localInterfa
// Allocate a new socket
if (module->RemoteAddress.sin6_family != AF_UNIX)
{
if (((struct sockaddr_in*)localInterface)->sin_family == AF_UNSPEC || (module->internalSocket = ILibGetSocket(localInterface, SOCK_STREAM, IPPROTO_TCP)) == 0)
if (((struct sockaddr_in*)localInterface)->sin_family == AF_UNSPEC || (module->internalSocket = ILibGetSocket(localInterface, SOCK_STREAM, IPPROTO_TCP)) < 0)
{
module->internalSocket = 0;
module->FinConnect = -1;

View File

@@ -6706,10 +6706,16 @@ SOCKET ILibGetSocket(struct sockaddr *localif, int type, int protocol)
{
int off = 0;
SOCKET sock;
if (localif->sa_family == AF_INET6 && g_ILibDetectIPv6Support == 0) { ILIBMARKPOSITION(1); return 0; }
if ((sock = socket(localif->sa_family, type, protocol)) == -1) { ILIBMARKPOSITION(2); return 0; }
if (localif->sa_family == AF_INET6 && g_ILibDetectIPv6Support == 0) { ILIBMARKPOSITION(1); return -1; }
if ((sock = socket(localif->sa_family, type, protocol)) == -1) { ILIBMARKPOSITION(2); return -1; }
if (sock == 0)
{
if ((sock = socket(localif->sa_family, type, protocol)) == -1) { ILIBMARKPOSITION(2); close(0); return -1; }
close(0);
}
#ifdef NACL
if (localif->sa_family == AF_INET6) if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&off, sizeof(off)) != 0) return 0;
if (localif->sa_family == AF_INET6) if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&off, sizeof(off)) != 0) return -1;
#else
if (localif->sa_family == AF_INET6) if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&off, sizeof(off)) != 0) ILIBCRITICALERREXIT(253);
#endif
@@ -6720,9 +6726,14 @@ SOCKET ILibGetSocket(struct sockaddr *localif, int type, int protocol)
}
#endif
#if defined(WIN32)
if (bind(sock, localif, INET_SOCKADDR_LENGTH(localif->sa_family)) != 0) { ILIBMARKPOSITION(3); closesocket(sock); return 0; }
if (bind(sock, localif, INET_SOCKADDR_LENGTH(localif->sa_family)) != 0) { ILIBMARKPOSITION(3); closesocket(sock); return -1; }
#else
if (bind(sock, localif, INET_SOCKADDR_LENGTH(localif->sa_family)) != 0) { ILIBMARKPOSITION(4); close(sock); return 0; }
if (bind(sock, localif, INET_SOCKADDR_LENGTH(localif->sa_family)) != 0)
{
ILIBMARKPOSITION(4);
close(sock);
return -1;
}
#endif
return sock;
}
@@ -10488,7 +10499,7 @@ int ILibDetectIPv6Support()
// Get our listening socket
sock = ILibGetSocket((struct sockaddr*)&addr, SOCK_DGRAM, IPPROTO_UDP);
if (sock == 0)
if (sock < 0)
{
g_ILibDetectIPv6Support = 0;
}