Update and clean Tomato RAF files
[tomato.git] / release / src / router / nginx / src / os / unix / ngx_socket.c
blob3978f655c044d7fccc735458f24e5381b7f8b8a0
2 /*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Nginx, Inc.
5 */
8 #include <ngx_config.h>
9 #include <ngx_core.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
18 * and Solaris 7.
20 * ioctl() in Linux 2.4 and 2.6 uses BKL, however, fcntl(F_SETFL) uses it too.
24 #if (NGX_HAVE_FIONBIO)
26 int
27 ngx_nonblocking(ngx_socket_t s)
29 int nb;
31 nb = 1;
33 return ioctl(s, FIONBIO, &nb);
37 int
38 ngx_blocking(ngx_socket_t s)
40 int nb;
42 nb = 0;
44 return ioctl(s, FIONBIO, &nb);
47 #endif
50 #if (NGX_FREEBSD)
52 int
53 ngx_tcp_nopush(ngx_socket_t s)
55 int tcp_nopush;
57 tcp_nopush = 1;
59 return setsockopt(s, IPPROTO_TCP, TCP_NOPUSH,
60 (const void *) &tcp_nopush, sizeof(int));
64 int
65 ngx_tcp_push(ngx_socket_t s)
67 int tcp_nopush;
69 tcp_nopush = 0;
71 return setsockopt(s, IPPROTO_TCP, TCP_NOPUSH,
72 (const void *) &tcp_nopush, sizeof(int));
75 #elif (NGX_LINUX)
78 int
79 ngx_tcp_nopush(ngx_socket_t s)
81 int cork;
83 cork = 1;
85 return setsockopt(s, IPPROTO_TCP, TCP_CORK,
86 (const void *) &cork, sizeof(int));
90 int
91 ngx_tcp_push(ngx_socket_t s)
93 int cork;
95 cork = 0;
97 return setsockopt(s, IPPROTO_TCP, TCP_CORK,
98 (const void *) &cork, sizeof(int));
101 #else
104 ngx_tcp_nopush(ngx_socket_t s)
106 return 0;
111 ngx_tcp_push(ngx_socket_t s)
113 return 0;
116 #endif