3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Nginx, Inc.
8 #include <ngx_config.h>
13 * ioctl(FIONBIO) sets a non-blocking mode with the single syscall
14 * while fcntl(F_SETFL, O_NONBLOCK) needs to learn the current state
15 * using fcntl(F_GETFL).
17 * ioctl() and fcntl() are syscalls at least in FreeBSD 2.x, Linux 2.2
20 * ioctl() in Linux 2.4 and 2.6 uses BKL, however, fcntl(F_SETFL) uses it too.
24 #if (NGX_HAVE_FIONBIO)
27 ngx_nonblocking(ngx_socket_t s
)
33 return ioctl(s
, FIONBIO
, &nb
);
38 ngx_blocking(ngx_socket_t s
)
44 return ioctl(s
, FIONBIO
, &nb
);
53 ngx_tcp_nopush(ngx_socket_t s
)
59 return setsockopt(s
, IPPROTO_TCP
, TCP_NOPUSH
,
60 (const void *) &tcp_nopush
, sizeof(int));
65 ngx_tcp_push(ngx_socket_t s
)
71 return setsockopt(s
, IPPROTO_TCP
, TCP_NOPUSH
,
72 (const void *) &tcp_nopush
, sizeof(int));
79 ngx_tcp_nopush(ngx_socket_t s
)
85 return setsockopt(s
, IPPROTO_TCP
, TCP_CORK
,
86 (const void *) &cork
, sizeof(int));
91 ngx_tcp_push(ngx_socket_t s
)
97 return setsockopt(s
, IPPROTO_TCP
, TCP_CORK
,
98 (const void *) &cork
, sizeof(int));
104 ngx_tcp_nopush(ngx_socket_t s
)
111 ngx_tcp_push(ngx_socket_t s
)