TCP-对等方如何知道接受失败的时间?
据我所知,一旦我们使用绑定套接字完成“侦听”调用,客户端启动的所有TCP连接都将开始成功,但是,当调用accept时,accept调用很有可能会失败(由于内存或文件描述符超出限制等原因) 我在solaris中运行了一些简单的测试 服务器: 1.使用ulimit命令将文件描述符的最大数量减少到8TCP-对等方如何知道接受失败的时间?,tcp,Tcp,据我所知,一旦我们使用绑定套接字完成“侦听”调用,客户端启动的所有TCP连接都将开始成功,但是,当调用accept时,accept调用很有可能会失败(由于内存或文件描述符超出限制等原因) 我在solaris中运行了一些简单的测试 服务器: 1.使用ulimit命令将文件描述符的最大数量减少到8 在listen to 8中设置待办事项 听一听 在循环中调用accept 8次,然后进入睡眠状态 客户: 连接大约8个连接 睡觉 测试结果: 在客户端,所有连接都通过。 在服务器端,只接受4次通过,失败4
我对这种行为有点困惑。非常感谢您的帮助。根据您的描述,我猜操作系统确实已经建立了所有8个连接,并将缓冲客户端发送的任何数据(最大窗口大小)。一旦您的服务器释放了一些FD并能够接受挂起的连接,您应该能够读取在此之前发送的任何内容。这也解释了为什么进程终止时连接会终止
简言之:连接确实存在,但您的程序无法使用它们,因为它没有空闲的FD。而连接存在是因为,与FD不同,存在空闲端口,对吗?