我有一个无源套接字,可以监听这样的连接:
t = listen(fd, 1);
fd
是之前创建的套接字的文件描述符。
如您所见,如果我理解得很好,listen() 应该只能在其待处理连接队列中放置一个传入套接字(因为它的积压参数 = 1)。但是,如果我尝试将多个套接字连接到被动套接字,则不会收到任何错误。而且我希望有一个ECONNREFUSED
错误,因为队列已满。
为什么我失踪了?
根据man listen(2)
,强调我的:
backlog 参数定义队列的最大长度 SOCKFD 的待处理连接可能会增加。 如果连接请求 当队列已满时到达,客户端可能会收到错误 指示 ECONN 拒绝,或者,如果底层协议支持 重新传输时,请求可能会被忽略,以便以后重新尝试 连接成功。
如果您使用的是 TCP 套接字,则行为是预期的,因为 TCP 支持重新传输。