Annotation of embedaddon/nginx/src/os/unix/ngx_socket.c, revision 1.1.1.1

1.1       misho       1: 
                      2: /*
                      3:  * Copyright (C) Igor Sysoev
                      4:  * Copyright (C) Nginx, Inc.
                      5:  */
                      6: 
                      7: 
                      8: #include <ngx_config.h>
                      9: #include <ngx_core.h>
                     10: 
                     11: 
                     12: /*
                     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).
                     16:  *
                     17:  * ioctl() and fcntl() are syscalls at least in FreeBSD 2.x, Linux 2.2
                     18:  * and Solaris 7.
                     19:  *
                     20:  * ioctl() in Linux 2.4 and 2.6 uses BKL, however, fcntl(F_SETFL) uses it too.
                     21:  */
                     22: 
                     23: 
                     24: #if (NGX_HAVE_FIONBIO)
                     25: 
                     26: int
                     27: ngx_nonblocking(ngx_socket_t s)
                     28: {
                     29:     int  nb;
                     30: 
                     31:     nb = 1;
                     32: 
                     33:     return ioctl(s, FIONBIO, &nb);
                     34: }
                     35: 
                     36: 
                     37: int
                     38: ngx_blocking(ngx_socket_t s)
                     39: {
                     40:     int  nb;
                     41: 
                     42:     nb = 0;
                     43: 
                     44:     return ioctl(s, FIONBIO, &nb);
                     45: }
                     46: 
                     47: #endif
                     48: 
                     49: 
                     50: #if (NGX_FREEBSD)
                     51: 
                     52: int
                     53: ngx_tcp_nopush(ngx_socket_t s)
                     54: {
                     55:     int  tcp_nopush;
                     56: 
                     57:     tcp_nopush = 1;
                     58: 
                     59:     return setsockopt(s, IPPROTO_TCP, TCP_NOPUSH,
                     60:                       (const void *) &tcp_nopush, sizeof(int));
                     61: }
                     62: 
                     63: 
                     64: int
                     65: ngx_tcp_push(ngx_socket_t s)
                     66: {
                     67:     int  tcp_nopush;
                     68: 
                     69:     tcp_nopush = 0;
                     70: 
                     71:     return setsockopt(s, IPPROTO_TCP, TCP_NOPUSH,
                     72:                       (const void *) &tcp_nopush, sizeof(int));
                     73: }
                     74: 
                     75: #elif (NGX_LINUX)
                     76: 
                     77: 
                     78: int
                     79: ngx_tcp_nopush(ngx_socket_t s)
                     80: {
                     81:     int  cork;
                     82: 
                     83:     cork = 1;
                     84: 
                     85:     return setsockopt(s, IPPROTO_TCP, TCP_CORK,
                     86:                       (const void *) &cork, sizeof(int));
                     87: }
                     88: 
                     89: 
                     90: int
                     91: ngx_tcp_push(ngx_socket_t s)
                     92: {
                     93:     int  cork;
                     94: 
                     95:     cork = 0;
                     96: 
                     97:     return setsockopt(s, IPPROTO_TCP, TCP_CORK,
                     98:                       (const void *) &cork, sizeof(int));
                     99: }
                    100: 
                    101: #else
                    102: 
                    103: int
                    104: ngx_tcp_nopush(ngx_socket_t s)
                    105: {
                    106:     return 0;
                    107: }
                    108: 
                    109: 
                    110: int
                    111: ngx_tcp_push(ngx_socket_t s)
                    112: {
                    113:     return 0;
                    114: }
                    115: 
                    116: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>