nginx-0.1.0文件分析2: ngx_socket.c

函数预览:

1)ngx_nonblocking


2)ngx_blocking

3)ngx_tcp_nopush

4)ngx_tcp_push

解析:

1)ngx_nonblocking

从字面意义来理解,就是非阻塞。

int ngx_nonblocking(ngx_socket_t s)
{
    u_long  nb;

    nb = 1;

    return ioctl(s, FIONBIO, &nb);
}

实际上是执行ioctl(s,FIONBIO,&(value:1));

FIONBIO  设置/ 清除非阻塞I/O 标志

这里通过1就是设置非阻塞标志位。

2)ngx_blocking

 

int ngx_blocking(ngx_socket_t s)
{
    u_long  nb;

    nb = 0;

    return ioctl(s, FIONBIO, &nb);
}

这个就不需要解释了。

 3)ngx_tcp_nopush

 

int ngx_tcp_nopush(ngx_socket_t s)
{
    int  cork;

    cork = 1;

    return setsockopt(s, IPPROTO_TCP, TCP_CORK,
                      (const void *) &cork, sizeof(int));
}

解释下TCP_CORK的意思:

如果将TCP连接比喻为一个管道,那TCP_CORK选项的作用就像一个塞子。
设置TCP_CORK选项,就是用塞子塞住管道,而取消TCP_CORK选项,就是将塞子拔掉。
当TCP_CORK选项被设置时,TCP链接不会发送任何的小包,即只有当数据量达到MSS时,才会被发送。
一般当数据传输完成时,通常需要取消该选项,以防被塞住,这样才可以让不够MSS大小的包能及时发出去。


4) ngx_tcp_nopush

不需要解释了。

你可能感兴趣的:(nginx,tcp)