mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2024-12-26 01:59:53 +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:
parent
a79f91161f
commit
84588095d5
@ -8029,38 +8029,17 @@ bool IsSubnetMask32(UINT ip)
|
||||
// Turn on and off the non-blocking mode of the socket
|
||||
void UnixSetSocketNonBlockingMode(int fd, bool nonblock)
|
||||
{
|
||||
UINT flag = 0;
|
||||
// Validate arguments
|
||||
if (fd == INVALID_SOCKET)
|
||||
{
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user