mirror of
https://github.com/simtactics/niotso.git
synced 2025-03-20 10:11:21 +00:00
50 lines
1.1 KiB
C
50 lines
1.1 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* noblock.c
|
|
* set a file descriptor as non-blocking
|
|
*
|
|
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* IDENTIFICATION
|
|
* src/port/noblock.c
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
#include "c.h"
|
|
|
|
#include <fcntl.h>
|
|
|
|
|
|
bool
|
|
pg_set_noblock(pgsocket sock)
|
|
{
|
|
#if !defined(WIN32)
|
|
return (fcntl(sock, F_SETFL, O_NONBLOCK) != -1);
|
|
#else
|
|
unsigned long ioctlsocket_ret = 1;
|
|
|
|
/* Returns non-0 on failure, while fcntl() returns -1 on failure */
|
|
return (ioctlsocket(sock, FIONBIO, &ioctlsocket_ret) == 0);
|
|
#endif
|
|
}
|
|
|
|
|
|
bool
|
|
pg_set_block(pgsocket sock)
|
|
{
|
|
#if !defined(WIN32)
|
|
int flags;
|
|
|
|
flags = fcntl(sock, F_GETFL);
|
|
if (flags < 0 || fcntl(sock, F_SETFL, (long) (flags & ~O_NONBLOCK)))
|
|
return false;
|
|
return true;
|
|
#else
|
|
unsigned long ioctlsocket_ret = 0;
|
|
|
|
/* Returns non-0 on failure, while fcntl() returns -1 on failure */
|
|
return (ioctlsocket(sock, FIONBIO, &ioctlsocket_ret) == 0);
|
|
#endif
|
|
}
|