【发布时间】:2014-07-28 14:39:53
【问题描述】:
我有一个用 C++ 编写的服务器应用程序。当客户端连接时,它会为他创建一个新线程。在那个线程中有一个从套接字读取的阻塞。因为客户端可能会意外断开连接并留下仍然挂在读取函数上的线程,所以有一个线程通过发送“心跳消息”来检查套接字是否仍然存在。该消息由 1 个字符组成,并被客户端“忽略”(它不像其他消息那样处理)。写法是这样的:
write(fd, ";", 1);
它工作正常,但真的有必要通过套接字发送一个随机字符吗?我试图发送一条空消息(长度为 0 的“”),但没有成功。有没有更好的方法来解决这个套接字检查?
编辑:
我正在使用 BSD 套接字 (TCP)。
【问题讨论】:
-
我认为您应该扩展您正在使用的套接字方法,因为 c++ 标准中没有套接字。
-
这些是 TCP 套接字吗?如果是这样,请考虑使用 TCP keepalive。
-
使用合理的读取超时时间。