diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2017-09-21 01:02:04 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2017-10-09 19:14:35 +0300 |
commit | 2a969b7f4bdb223d3626dc14b684701942ccafb2 (patch) | |
tree | 5b317acd47e5183b7dd127417cd0017c39f28f94 /libpq/noblock.c | |
parent | 05ac4b76f5d30def9d51815c7f25d54316592f45 (diff) |
Make package to be source rather than stub
Diffstat (limited to 'libpq/noblock.c')
-rw-r--r-- | libpq/noblock.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/libpq/noblock.c b/libpq/noblock.c new file mode 100644 index 0000000..959d3ad --- /dev/null +++ b/libpq/noblock.c @@ -0,0 +1,66 @@ +/*------------------------------------------------------------------------- + * + * noblock.c + * set a file descriptor as blocking or non-blocking + * + * Portions Copyright (c) 1996-2016, 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> + + +/* + * Put socket into nonblock mode. + * Returns true on success, false on failure. + */ +bool +pg_set_noblock(pgsocket sock) +{ +#if !defined(WIN32) + int flags; + + flags = fcntl(sock, F_GETFL); + if (flags < 0) + return false; + if (fcntl(sock, F_SETFL, (flags | O_NONBLOCK)) == -1) + return false; + return true; +#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 +} + +/* + * Put socket into blocking mode. + * Returns true on success, false on failure. + */ +bool +pg_set_block(pgsocket sock) +{ +#if !defined(WIN32) + int flags; + + flags = fcntl(sock, F_GETFL); + if (flags < 0) + return false; + if (fcntl(sock, F_SETFL, (flags & ~O_NONBLOCK)) == -1) + 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 +} |