c语言 - 为什么当我连接的套接字多于用于侦听的参数积压时,我没有收到错误?



我有一个无源套接字,可以监听这样的连接:

t = listen(fd, 1); 

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

为什么我失踪了?

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

backlog 参数定义队列的最大长度 SOCKFD 的待处理连接可能会增加。 如果连接请求 当队列已满时到达,客户端可能会收到错误 指示 ECONN 拒绝,或者,如果底层协议支持 重新传输时,请求可能会被忽略,以便以后重新尝试 连接成功

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

最新更新