Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我不';当我连接的套接字多于要侦听的参数backlog时,是否不会出错?_C_Sockets_Listen_Econnrefused - Fatal编程技术网

为什么我不';当我连接的套接字多于要侦听的参数backlog时,是否不会出错?

为什么我不';当我连接的套接字多于要侦听的参数backlog时,是否不会出错?,c,sockets,listen,econnrefused,C,Sockets,Listen,Econnrefused,我有一个被动插座,可以监听如下连接: t = listen(fd, 1); fd是以前创建的套接字的文件描述符。 如您所见,如果我理解得很好,listen()应该只能在其挂起连接队列中放置一个传入套接字(因为其backlog参数=1)。但是,如果我尝试将几个插座连接到被动插座,我不会得到任何错误。我希望有一个econnrefered错误,因为队列已满 为什么我失踪了?根据男人听(2),强调我的: backlog参数定义队列的最大长度 sockfd的挂起连接可能会增加。如果有连接请求 当队列已

我有一个被动插座,可以监听如下连接:

t = listen(fd, 1); 
fd
是以前创建的套接字的文件描述符。
如您所见,如果我理解得很好,listen()应该只能在其挂起连接队列中放置一个传入套接字(因为其backlog参数=1)。但是,如果我尝试将几个插座连接到被动插座,我不会得到任何错误。我希望有一个
econnrefered
错误,因为队列已满

为什么我失踪了?

根据
男人听(2)
,强调我的:

backlog参数定义队列的最大长度 sockfd的挂起连接可能会增加。如果有连接请求 当队列已满时到达,客户端可能会收到错误消息 指示ECONREFUSE或,如果基础协议支持 重新传输时,请求可能会被忽略,以便稍后重新尝试 at连接成功


如果您使用的是TCP套接字,则会出现这种行为,因为TCP支持重新传输。

您是否捕获了数据包并验证是否从服务器接收到SYN-ACK?backlog参数只是一个提示。Linux上的有效最小值似乎是16。@jxh不,我没有验证它,如果是这样的话,我能得出什么结论?@KarstenKoop我不明白一个论点的要点,即它最终被另一个值替换,但可以。有没有办法设定一个最大值?或者有没有一种方法可以通过编程方式找到它?如果返回SYN-ACK,则可能意味着服务器已允许连接请求进入其侦听队列。如果没有,则可能是服务器已放弃连接请求。因此使用TCP没有限制?我怎样才能设置一个呢?从服务器的角度来看,这是一个限制,它正是您提供给
listen()
的数字。所有其他连接尝试都将被忽略。从客户端的角度来看,一个
connect()
似乎只需要花费很多时间。我认为实现超时是一个很好的解决方案,这样客户端代码就不会无限期(或长时间)阻塞。