Mercurial > hg > nginx
view src/os/unix/ngx_socket.c @ 207:6e0fef527732
nginx-0.0.1-2003-12-05-20:07:27 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 05 Dec 2003 17:07:27 +0000 |
parents | 8dee38ea9117 |
children | b6793bc5034b |
line wrap: on
line source
#include <ngx_config.h> #include <ngx_core.h> /* ioctl(FIONBIO) set blocking mode with one syscall only while fcntl(F_SETFL, ~O_NONBLOCK) need to know previous state using fcntl(F_GETFL). ioctl() and fcntl() are syscalls on FreeBSD, Solaris 7/8 and Linux */ #if (HAVE_FIONBIO) int ngx_nonblocking(ngx_socket_t s) { unsigned long nb = 1; return ioctl(s, FIONBIO, &nb); } int ngx_blocking(ngx_socket_t s) { unsigned long nb = 0; return ioctl(s, FIONBIO, &nb); } #endif #ifdef __FreeBSD__ int ngx_tcp_nopush(ngx_socket_t s) { int tcp_nopush; tcp_nopush = 1; return setsockopt(s, IPPROTO_TCP, TCP_NOPUSH, (const void *) &tcp_nopush, sizeof(int)); } int ngx_tcp_push(ngx_socket_t s) { int tcp_nopush; tcp_nopush = 0; return setsockopt(s, IPPROTO_TCP, TCP_NOPUSH, (const void *) &tcp_nopush, sizeof(int)); } #elif __linux__ int ngx_tcp_nopush(ngx_socket_t s) { int cork; cork = 1; return setsockopt(s, IPPROTO_TCP, TCP_CORK, (const void *) &cork, sizeof(int)); } int ngx_tcp_push(ngx_socket_t s) { int cork; cork = 0; return setsockopt(s, IPPROTO_TCP, TCP_CORK, (const void *) &cork, sizeof(int)); } #else int ngx_tcp_nopush(ngx_socket_t s) { return NGX_OK; } int ngx_tcp_push(ngx_socket_t s) { return NGX_OK; } #endif