PostgreSQL Source Code  git master
noblock.c
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * noblock.c
4  * set a file descriptor as blocking or non-blocking
5  *
6  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  * IDENTIFICATION
10  * src/port/noblock.c
11  *
12  *-------------------------------------------------------------------------
13  */
14 
15 #include "c.h"
16 
17 #include <fcntl.h>
18 
19 
20 /*
21  * Put socket into nonblock mode.
22  * Returns true on success, false on failure.
23  */
24 bool
26 {
27 #if !defined(WIN32)
28  int flags;
29 
30  flags = fcntl(sock, F_GETFL);
31  if (flags < 0)
32  return false;
33  if (fcntl(sock, F_SETFL, (flags | O_NONBLOCK)) == -1)
34  return false;
35  return true;
36 #else
37  unsigned long ioctlsocket_ret = 1;
38 
39  /* Returns non-0 on failure, while fcntl() returns -1 on failure */
40  return (ioctlsocket(sock, FIONBIO, &ioctlsocket_ret) == 0);
41 #endif
42 }
43 
44 /*
45  * Put socket into blocking mode.
46  * Returns true on success, false on failure.
47  */
48 bool
50 {
51 #if !defined(WIN32)
52  int flags;
53 
54  flags = fcntl(sock, F_GETFL);
55  if (flags < 0)
56  return false;
57  if (fcntl(sock, F_SETFL, (flags & ~O_NONBLOCK)) == -1)
58  return false;
59  return true;
60 #else
61  unsigned long ioctlsocket_ret = 0;
62 
63  /* Returns non-0 on failure, while fcntl() returns -1 on failure */
64  return (ioctlsocket(sock, FIONBIO, &ioctlsocket_ret) == 0);
65 #endif
66 }
bool pg_set_noblock(pgsocket sock)
Definition: noblock.c:25
bool pg_set_block(pgsocket sock)
Definition: noblock.c:49
int pgsocket
Definition: port.h:29