TCP_DEFER_ACCEPT 优化

使用TCP_DEFER_ACCEPT可以减少用户程序hold的连接数,也可以减少用户调用epoll_ctl和epoll_wait的次数,从而提高了程序的性能。


设置listen套接字的TCP_DEFER_ACCEPT选项后, 只当一个链接有数据时是才会从accpet中返回(而不是三次握手完成)。

 

使用方法:

#include <netinet/tcp.h>
int timeout=1;
setsockopt( listen_fd, IPPROTO_TCP, TCP_DEFER_ACCEPT, &timeout, sizeof(int) )

timeout参数:

当服务端一直没接受到数据后,会重发SYN/ACK给客户端,当超过(net.ipv4.tcp_synack_retries = 5)次后, 就开始timeout的计时.

timeout = 0表示取消 TCP_DEFER_ACCEPT选项

 

性能四杀手:内存拷贝,内存分配,进程切换,系统调用

TCP_DEFER_ACCEPT 对性能的贡献,就在于 减少系统调用了。

你可能感兴趣的:(tcp)