我有一个客户端/服务器应用程序,它持续维护一个套接字。当客户端退出时,它会向服务器发送一个“退出”消息,然后关闭套接字并清理。当服务器收到此消息时,它会清理并关闭套接字,不回复该消息。
我经常看到服务器记录“连接被对等方重置”的错误,而没有任何用户投诉,我想这必须是我的注销序列中偶发的时间问题。当最终用户抱怨他们的连接实际上被断开时,我也会看到相同的错误,因此我想知道如何区分这些情况 - 或者更好的是,如何在正常情况下防止虚假的“连接重置”情况。
我猜测在某些情况下,在收到“退出”消息之前(或期间),服务器会受到关闭的套接字的影响。这可能吗?在实际关闭套接字之前,是否有正确的顺序让服务器知道客户端即将终止的方法?有一种检查最后一条消息是否在关闭之前传递的方法吗?
谢谢, 罗布
我经常看到服务器记录“连接被对等方重置”的错误,而没有任何用户投诉,我想这必须是我的注销序列中偶发的时间问题。当最终用户抱怨他们的连接实际上被断开时,我也会看到相同的错误,因此我想知道如何区分这些情况 - 或者更好的是,如何在正常情况下防止虚假的“连接重置”情况。
我猜测在某些情况下,在收到“退出”消息之前(或期间),服务器会受到关闭的套接字的影响。这可能吗?在实际关闭套接字之前,是否有正确的顺序让服务器知道客户端即将终止的方法?有一种检查最后一条消息是否在关闭之前传递的方法吗?
谢谢, 罗布
poll()
和select()
的比较,但我的想法是客户端没有进行shutdown()
就进行了close()
,所以poll()
检查套接字(在其一侧标记为打开)以获取输入,并惊讶地发现连接被重置。保持活动状态可能与此有关,但不应该,因为据我记得,这只是在关闭之前要读取的一个数据包。 - John C