1
0
mirror of https://github.com/SoftEtherVPN/SoftEtherVPN.git synced 2024-11-09 19:20:41 +03:00

Mayaqua/Network.c: Always use fcntl() to toggle socket non-blocking mode (UNIX)

O_NONBLOCK is standardized by POSIX, as opposed to FIONBIO.

This commit also fixes a bug: fcntl() was only called to disable the mode.
This commit is contained in:
Davide Beatrici 2021-04-01 08:04:27 +02:00
parent a79f91161f
commit 84588095d5

View File

@ -8029,38 +8029,17 @@ bool IsSubnetMask32(UINT ip)
// Turn on and off the non-blocking mode of the socket // Turn on and off the non-blocking mode of the socket
void UnixSetSocketNonBlockingMode(int fd, bool nonblock) void UnixSetSocketNonBlockingMode(int fd, bool nonblock)
{ {
UINT flag = 0;
// Validate arguments // Validate arguments
if (fd == INVALID_SOCKET) if (fd == INVALID_SOCKET)
{ {
return; return;
} }
if (nonblock) const int flags = fcntl(fd, F_GETFL, 0);
if (flags != -1)
{ {
flag = 1; fcntl(fd, F_SETFL, nonblock ? flags | O_NONBLOCK : flags & ~O_NONBLOCK);
} }
#ifdef FIONBIO
ioctl(fd, FIONBIO, &flag);
#else // FIONBIO
{
int flag = fcntl(fd, F_GETFL, 0);
if (flag != -1)
{
if (nonblock)
{
flag |= O_NONBLOCK;
}
else
{
flag = flag & ~O_NONBLOCK;
fcntl(fd, F_SETFL, flag);
}
}
}
#endif // FIONBIO
} }
// Do Nothing // Do Nothing