sockets - 关闭套接字以避免 "connection reset by peer"的正确方法

标签 sockets

我有一个持续维护套接字的客户端/服务器应用程序。当客户端注销时,它会向服务器发送“注销”消息,然后关闭套接字并进行清理。服务器在收到此消息时清理并关闭套接字 - 并且不回复该消息。

在相当规律的基础上,我看到服务器记录了“连接被对等重置”错误,而最终用户没有任何投诉,我认为这一定是我的签核序列中偶尔出现的计时问题。当最终用户提示他们的连接实际上被断开时,我确实看到了同样的错误,所以我想知道如何区分这些场景之间的区别——或者更好的是,如何在正常情况下防止虚假的“连接重置”场景。

我猜测在某些情况下,服务器在收到“退出”消息之前(或期间)被关闭的套接字击中。这可能吗?在实际关闭套接字之前,您是否应该遵循正确的顺序让服务器知道客户端即将终止?有什么方法可以在关闭前检查最后一条消息是否已送达?

谢谢, 罗布

最佳答案

shutdown(s, SHUT_RDWR)功能应该可以解决您的问题。 this document 中有更完整的解释.

关于sockets - 关闭套接字以避免 "connection reset by peer"的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29283322/

相关文章:

c# - 使用异步套接字的 TCP 端口转发

java - 在java中,同一个程序可以同时作为服务器和客户端运行吗?

java - 在定期调用的循环中通过 TCP 发送的第一个请求需要很长时间

java - 因为我只能通过 multicasocket 中的以太网接口(interface)发送信息

c - 在不关闭套接字的情况下停止阻塞接收

c# - 在套接字编程c#中发送大文件

c - C语言中从socket读取数据

c - 在套接字中使用 read() 访问缓冲区

java - 如何在 Axis 中禁用 SSLv2 套接字协议(protocol)

multithreading - WSA发送到多线程iocp服务器中的所有已连接套接字