【发布时间】:2010-04-30 19:02:48
【问题描述】:
我正在处理一个错误的服务器,它有时会无法接受()连接(但它的监听套接字保持打开状态)。这是在带有 unix 域套接字的 Linux 上。
目前检测到这一点的唯一方法是在发送一堆数据后,缓冲区填满并阻塞,服务器不发送任何回复。这种事后很久的故障模式很难与其他错误区分开来 - 服务器可能由于其他原因而无响应。
特别是对于 unix 域套接字,内核似乎应该知道是否发生了 accept();有什么办法可以找出来吗?客户端是否可以阻止直到 accept() 以某种方式发生,或者至少检查它是否有?
这只是为了调试目的,所以它可能有点难看。
【问题讨论】:
-
默认情况下,连接将阻塞,直到连接被接受。不知道我是否理解你的问题
-
@nc3b:不,
connect()会阻塞,直到连接建立并在侦听积压中挂起。这就是listen()调用中的backlog参数的全部意义 - 它设置了可以挂起的连接数。
标签: linux sockets network-programming unix