客户端可以确定服务器是否具有accept()和unix套接字?

时间:2010-04-30 19:02:48

标签: linux sockets network-programming unix

我正在处理一个有时无法接受()连接的错误服务器(但是将其侦听套接字打开)。这是在Linux上使用unix域套接字。

目前检测此问题的唯一方法是,在发送一堆数据后,缓冲区会填满并阻塞,服务器不会发送任何回复。这种长期故障模式很难与其他错误区分开来 - 服务器可能因其他原因而无法响应。

特别是对于unix域套接字,内核似乎应该知道是否发生了accept();有没有办法找到这个?客户端可以阻塞,直到accept()以某种方式发生,或者至少检查它是否有?

这仅用于调试目的,因此可能有点难看。

2 个答案:

答案 0 :(得分:3)

我会说答案是更改协议,以便服务器先说话(如SMTP,而不是HTTP)

内核在进行accept()系统调用之前已接受套接字;如果它永远不会到达,那么插座就会处于等待状态。没有办法将此与接受连接但不说话的服务器区分开来。这是BSD套接字始终有效的方式。

答案 1 :(得分:3)

看起来答案是“不”;内核无法获取此信息。

(更改协议不是答案,因为我正在调试预先存在的不可更改的协议)