我有一个客户端/服务器应用程序,可以持续维护套接字。当客户签字时,它会发送一个“签约”的签名。消息到服务器,然后关闭套接字并清理。
收到此消息时,服务器会清除并关闭套接字。在相当规律的基础上,我看到"连接重置由同行"服务器记录错误而没有最终用户的任何投诉,我认为这在我的签核序列中偶尔会出现时间问题。当最终用户抱怨他们的连接实际被丢弃时,我确实看到了相同的错误,因此我想知道如何区分这些情况 - 甚至更好,如何防止虚假连接重置&#39 ;正常情况下的情景。
我猜测在某些情况下服务器在收到"签署之前(或期间)被关闭的套接字击中"信息。这可能吗?在实际关闭套接字之前,是否有一个适当的顺序让服务器知道客户端即将终止?有什么方法可以检查最后一条消息是在关闭之前发送的?
谢谢, 罗布
答案 0 :(得分:3)
shutdown(s, SHUT_RDWR)
函数可以解决您的问题。在this document中有更完整的解释。
答案 1 :(得分:1)
这通常意味着您已写入已由对等方关闭的连接,或者已关闭连接而未读取所有待处理的传入数据。换句话说,应用程序协议错误。