PHP看不到远程套接字断开连接

时间:2012-12-17 03:07:55

标签: php sockets network-programming disconnect

我有一个PHP套接字服务器,可以监听多个套接字 在我的客户端,如果我挂起机器,则不会向PHP服务器发送断开连接消息。如何确定哪个客户端仍然连接,或者是否有这些断开事件? 在PHP中,我使用socket_select来收听我的所有套接字。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果远程套接字已正确关闭,则套接字将变为可读,但接收呼叫将不返回任何数据。如果通信中出现错误,则下一个接收或发送操作将返回错误。

但是如果连接空闲,那么你将不知道另一端是否存在。您可以设置套接字选项(SO_KEEPALIVE)以自动让系统发送“保持活动”消息并发现是否存在任何问题。 SO_KEEPALIVE的问题是默认的时间是两个小时。如果您需要更短的时间(最有可能),那么最好的办法就是将自己的保持活动消息传递作为协议的一部分。

答案 1 :(得分:0)

如果出现错误,socket_read将返回false,如果没有数据则返回空字符串。 这些事情不会触发事件,你必须测试连接是否仍然存在。