mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2024-11-25 10: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
|
// 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
|
||||||
|
Loading…
Reference in New Issue
Block a user