我有一个被动套接字,像这样监听连接:
t = listen(fd, 1);
fd
是先前创建的套接字的文件描述符。
如您所见并且如果我理解正确,listen()
应该能够将仅一个传入套接字放置在其挂起连接队列中(因为其backlog参数= 1)。但是,如果我尝试将多个套接字连接到被动套接字,我不会收到任何错误。我期望会出现ECONNREFUSED
错误,因为队列已满。
我错在哪里了?
我有一个被动套接字,像这样监听连接:
t = listen(fd, 1);
fd
是先前创建的套接字的文件描述符。
如您所见并且如果我理解正确,listen()
应该能够将仅一个传入套接字放置在其挂起连接队列中(因为其backlog参数= 1)。但是,如果我尝试将多个套接字连接到被动套接字,我不会收到任何错误。我期望会出现ECONNREFUSED
错误,因为队列已满。
我错在哪里了?
man listen(2)
(重点标注是我的):listen()
的数字。所有其他连接尝试都将被忽略。
从客户端的角度来看,似乎 connect()
只是需要很长时间。
我认为实现超时是一个不错的解决方案,这样客户端代码就不会无限期地(或长时间)阻塞。 - leovp