Web服务器运行过程中,浏览器不停地向它发送请求。其中有一些请求进入到等待队列后,协议栈已经尝试将它删除(但未成功),因为后续请求到来,前面的请求被认为重置了。这些socket在accept执行时发生错误:
在网上找到了一个相关链接,这里面说FreeBSD本身是存在这个问题的。
http://lists.freebsd.org/pipermail/freebsd-hackers/2012-December/041401.html
继续先。
这个和FreeBSD没有多大关系,是由于文件系统的accept函数中没处理好导致的。
在FreeBSD中执行bsd_accept失败后,已将socket指派给文件对象,在文件系统的accept函数中处理时,直接把文件对象设置为可以重用了。在之后调用文件对象时,使用了此文件对象,从而导致与之相关的socket未被释放。