listen()是否连续运行,或者我是否需要循环它以保持在套接字上接收连接
Does listen() run continuously or do I need to loop it to keep receiving connections on a socket?
出于学习目的,我在同一台机器上使用环回地址运行客户端和服务器,但我的"服务器"代码似乎飞回了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,则连接失败。听起来这很可能是正在发生的事情。您仍然可以在没有连接的情况下向套接字进行写入,但您的消息不会到达任何位置。
相关文章:
- 了解是否接受套接字
- 当发生套接字错误时,作为QWebSocket基础的QTcpSocket(或QSslSocket)是否会自行销毁
- 如何知道请求是否完全使用 TCP 套接字接收?
- epoll_wait() 是否报告所有关闭的套接字事件
- 是否可以寻址另一个网络中的服务器/客户端套接字?(C++)
- 是否可以在使用 Boost::asio 之前从套接字读取后执行async_handshake
- 如何检测我是否有要从套接字读取的内容?(c++)
- 此函数是否对套接字有问题?
- ZeroMQ是否允许多个服务器套接字
- windows DLL是否有可能在多个线程或进程之间使用相同的套接字编号
- 是否可以在数据报套接字中同时用于发送和接收
- TCP套接字:在发送之前检测对等方是否已关闭?(Linux)
- 套接字接收流在接收 FIN 数据包时是否会关闭
- 套接字是否保存HDD上的任何数据
- 是否可以将套接字设置为仅针对recv()函数的非阻塞套接字
- IP_ADD_MEMBERSHIP套接字上,套接字是否也会侦听单播
- 关闭C++中的套接字是否有任何限制
- 是否可以通过套接字发送指向函数的指针
- 我是否需要锁才能同时使用同一应用程序两次写入套接字
- UDP 套接字.如何确定数据是否发送到有线