正确的方法来关闭套接字以避免#34;连接重置#34;

时间:2015-03-26 16:02:01

标签: sockets

我有一个客户端/服务器应用程序,可以持续维护套接字。当客户签字时,它会发送一个“签约”的签名。消息到服务器,然后关闭套接字并清理。

收到此消息时,服务器会清除并关闭套接字。

在相当规律的基础上,我看到"连接重置由同行"服务器记录错误而没有最终用户的任何投诉,我认为这在我的签核序列中偶尔会出现时间问题。当最终用户抱怨他们的连接实际被丢弃时,我确实看到了相同的错误,因此我想知道如何区分这些情况 - 甚至更好,如何防止虚假连接重置&#39 ;正常情况下的情景。

我猜测在某些情况下服务器在收到"签署之前(或期间)被关闭的套接字击中"信息。这可能吗?在实际关闭套接字之前,是否有一个适当的顺序让服务器知道客户端即将终止?有什么方法可以检查最后一条消息是在关闭之前发送的?

谢谢, 罗布

2 个答案:

答案 0 :(得分:3)

shutdown(s, SHUT_RDWR)函数可以解决您的问题。在this document中有更完整的解释。

答案 1 :(得分:1)

这通常意味着您已写入已由对等方关闭的连接,或者已关闭连接而未读取所有待处理的传入数据。换句话说,应用程序协议错误。