3

我有一个被动套接字来监听这样的连接:

t = listen(fd, 1); 

fd是之前创建的套接字的文件描述符。
如您所见,如果我理解得很好,listen() 应该只能将一个传入套接字放入其挂起的连接队列中(因为它的 backlog 参数 = 1)。但是,如果我尝试将多个套接字连接到被动套接字,则不会出现任何错误。而且我预计会出现ECONNREFUSED错误,因为队列已满。

为什么我失踪了?

4

1 回答 1

3

根据man listen(2),强调我的:

backlog 参数定义了 sockfd 的挂起连接队列可以增长到的最大长度。如果队列已满时连接请求到达,客户端可能会收到带有 ECONNREFUSED 指示的错误,或者,如果底层协议支持重传,则可能会忽略该请求,以便稍后重新尝试连接成功

如果您使用的是 TCP 套接字,则该行为是预期的,因为 TCP 支持重新传输。

于 2016-06-03T09:01:20.467 回答