大家好。我用sys/socket在C++中编写了客户端和服务器。我需要处理一种情况,即客户端仍处于活动状态,但服务器已关闭。建议使用定期发出心跳以断言连接性的方法来处理这种情况。如果没有连接性,则尝试在X秒内每Y时间段重新连接,然后超时。
这种“心跳”方式是检查连接性的最佳方法吗?
我正在使用的套接字可能有相关信息,有没有一种方法可以在不影响缓冲区的情况下检查是否连接?
SIO_KEEPALIVE_VALS
来在Windows套接字中启用TCP keepalive。好的,我不知道你的程序是做什么的,所以也许这不可行,但我建议你避免尝试一直保持套接字开启。它只应该在使用时打开,并在不使用时关闭。
如果你正在等待用户输入而处于读写之间,请关闭套接字。设计你的客户端/服务器协议(假设你是手动设计而不是使用任何标准协议,如http和/或SOAP)来处理这个问题。
如果连接断开,套接字将出现错误;编写你的程序,使得在向套接字写入时不会丢失任何信息,在从套接字读取时出现错误时不会获得任何信息。事务性和原子性应该被纳入你的客户端/服务器协议中(再次假设你正在自己设计它)。