ret = listen(connection_socket, 1);
// 允许一个连接在队列中等待。
我已经打开了两个终端并同时运行了客户端进程。
服务器正在处理客户端1的数据,现在客户端2在等待队列中。此时队列已满。
在这个阶段,我启动了第三个终端并运行了客户端进程。由于队列已满,这个客户端的连接应该返回-1,并且errno应该设置为ECONNREFUSED,但是在这种情况下,connect对于客户端3也返回0。那么listen()
系统调用的目的是什么呢?
listen
指示TCP/IP栈开始在套接字绑定的端口上接受传入的TCP连接。accept
。请注意,accept
不会协商TCP握手,它只从后台队列中取出一个已经被接受的连接(或等待一个连接的到来)。accept
,这意味着传入的客户端连接至少会建立TCP握手。如果您尝试在backlog队列为1时拥有两个挂起的连接,则第二个客户端连接可能会超时或被拒绝,如果服务器代码不积极地调用accept
将这些连接推出backlog队列并放入套接字中。listen
函数的第二个参数的整个意义所在。请参考上面的答案。 - undefined
listen
文档中的“or”子句可能会提供您正在寻找的提示。 - WhozCraig