TCP backlog耗尽导致传入连接不被发信号通知

时间:2012-06-01 06:58:04

标签: sockets tcp connect nonblocking backlog

我正在做以下事情:

  1. 打开侦听TCP套接字。
  2. 将BACKLOG设置为10
  3. 打开50个连接插座(使用非阻塞连接)
  4. 在侦听套接字上轮询并接受连接
  5. 关闭能够传输任何数据的连接
  6. 我看到的是所有50个连接都成功,但是,侦听套接字上的POLLIN仅发出约30次信号。这意味着只接受30个连接。

    当我运行netstat是这样的条件时,我看不到挂起的ESTABLISHED连接。在TIME_WAIT状态下有几个连接挂起,但这似乎不相关。

    上面是在Linux上观察到的,但是,类似的行为似乎也发生在FreeBSD和NetBSD上。

    任何人都有这方面的经验吗?

1 个答案:

答案 0 :(得分:2)

我已经得到了带外解释。对此感兴趣的人可以在这里阅读:

http://www.evanjones.ca/tcp-stuck-connection-mystery.html