求解TCP_DEFER_ACCEPT 和 somaxconn的关系?
学习linux的网络编程写了基于epoll简单例程
基本是个echo sever的样子(返回的数据是HTTP的)
和基本的echo例程区别就是 accept后不是立即处理 而是加到了一个queue里,然后统一处理。
用AB做测试 ab -n 10000 -c 100 http://127.0.0.1:8080/ 都工作正常,速度也不错
当把并发数增大后,在最后会卡住,卡在recv上(为了调试改成阻塞模式过,第一次处理就直接阻塞,用epoll的话就是EAGAIN一次,加进poll就再也wait不到,一直等能等到RDHUP)
这段程序设置了 TCP_DEFER_ACCEPT 为 1 ,不设置就不会卡住。
同时发现 和 somaxconn有关联性,加大somaxconn也不会卡住。
大概的比例是 能支持的并发数 = somaxconn * 2
用的 ubuntu 11.1 (3.0.0-14的内核)