listen()是否连续运行,或者我是否需要循环它以保持在套接字上接收连接

Does listen() run continuously or do I need to loop it to keep receiving connections on a socket?

本文关键字:是否 套接字 连接 运行 连续 或者 listen 循环      更新时间:2023-10-16

出于学习目的,我在同一台机器上使用环回地址运行客户端和服务器,但我的"服务器"代码似乎飞回了listen(),然后挂在了connect()上。listen()是否需要处于无休止的循环中才能不断接收连接?

如果listen()在我还没有建立连接的情况下返回0,我将如何确定是否在队列中建立了连接?

我有一个accept()调用,但代码挂在那里。我在前面和后面都有调试语句,它永远不会超过accept()。

在另一端,我的客户端代码connect()似乎很好(没有抛出错误),并且似乎是编写和完成的,即使服务器代码从未获得连接。

listen函数定义囤积。只需要调用一次。

然后使用accept接收传入连接。最好及时处理,然后再次进行accept

connect()accept()在等待连接时都应该阻塞。

   connect()  #client blocks while waiting for remote server to answer
   accept()   #server blocks while waiting for a client

listen()根本不应该阻塞。它告诉操作系统为请求分配额外的内存,这样操作系统就可以对同时到达的客户端进行排队。你只需要打一次电话。

如果accept()从未在服务器中完成,那么您很可能永远没有连接。如果connect()调用正在客户端中完成,则需要检查其返回值。如果返回-1,则连接失败。听起来这很可能是正在发生的事情。您仍然可以在没有连接的情况下向套接字进行写入,但您的消息不会到达任何位置。