|  |  | 
|  | /* | 
|  | * Copyright (C) Igor Sysoev | 
|  | */ | 
|  |  | 
|  |  | 
|  | #ifndef _NGX_SOCKET_H_INCLUDED_ | 
|  | #define _NGX_SOCKET_H_INCLUDED_ | 
|  |  | 
|  |  | 
|  | #include <ngx_config.h> | 
|  |  | 
|  |  | 
|  | #define NGX_WRITE_SHUTDOWN SHUT_WR | 
|  |  | 
|  | typedef int  ngx_socket_t; | 
|  |  | 
|  | #define ngx_socket          socket | 
|  | #define ngx_socket_n        "socket()" | 
|  |  | 
|  |  | 
|  | #if (NGX_HAVE_FIONBIO) | 
|  |  | 
|  | int ngx_nonblocking(ngx_socket_t s); | 
|  | int ngx_blocking(ngx_socket_t s); | 
|  |  | 
|  | #define ngx_nonblocking_n   "ioctl(FIONBIO)" | 
|  | #define ngx_blocking_n      "ioctl(!FIONBIO)" | 
|  |  | 
|  | #else | 
|  |  | 
|  | #define ngx_nonblocking(s)  fcntl(s, F_SETFL, fcntl(s, F_GETFL) | O_NONBLOCK) | 
|  | #define ngx_nonblocking_n   "fcntl(O_NONBLOCK)" | 
|  |  | 
|  | #define ngx_blocking(s)     fcntl(s, F_SETFL, fcntl(s, F_GETFL) & ~O_NONBLOCK) | 
|  | #define ngx_blocking_n      "fcntl(!O_NONBLOCK)" | 
|  |  | 
|  | #endif | 
|  |  | 
|  | int ngx_tcp_nopush(ngx_socket_t s); | 
|  | int ngx_tcp_push(ngx_socket_t s); | 
|  |  | 
|  | #if (NGX_LINUX) | 
|  |  | 
|  | #define ngx_tcp_nopush_n   "setsockopt(TCP_CORK)" | 
|  | #define ngx_tcp_push_n     "setsockopt(!TCP_CORK)" | 
|  |  | 
|  | #else | 
|  |  | 
|  | #define ngx_tcp_nopush_n   "setsockopt(TCP_NOPUSH)" | 
|  | #define ngx_tcp_push_n     "setsockopt(!TCP_NOPUSH)" | 
|  |  | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #define ngx_shutdown_socket    shutdown | 
|  | #define ngx_shutdown_socket_n  "shutdown()" | 
|  |  | 
|  | #define ngx_close_socket    close | 
|  | #define ngx_close_socket_n  "close() socket" | 
|  |  | 
|  |  | 
|  | #endif /* _NGX_SOCKET_H_INCLUDED_ */ |