发布
社区首页 >问答首页 >客户端上的连接进程终止后,c++服务器不会关闭TCP套接字连接

客户端上的连接进程终止后,c++服务器不会关闭TCP套接字连接
EN

Stack Overflow用户
提问于 2013-09-10 22:42:51
回答 2查看 1.7K关注 0票数 2

我遇到了一个对我来说很奇怪的问题

我有一个c++应用程序(服务器)部署在centos和客户端(也在centos上运行),有一个程序将通过计时器连接服务器,以便当连接数量达到1k时,计时器停止。

我可以运行以下命令来检测服务器上的连接:

netstat -nat |grep -i“端口”| grep“已建立”

到目前为止,它的效果还不错。但是,在我从客户端终止该进程后,服务器上仍有大量处于已建立状态的连接。即使我关闭了客户端机器,在第二天早上超过10个小时后,我仍然能够在服务器上看到大量处于已建立状态的活动连接。

尽管当我终止进程时可能会丢失数据包,因此它无法通知服务器TCP连接已关闭,但我相信TCP中有一个默认的心跳(Keepalive)机制,它能够检查连接是否处于活动状态。

通过上面提到的命令获取连接数可靠吗?否则,服务器不释放关闭的连接会出什么问题?

EN

回答 2

Stack Overflow用户

发布于 2013-09-11 01:25:19

TCP keepalive的默认值约为2小时(在BSD/Linux实现中)。当您看到connectoins在10小时后仍在运行时,您确定设置了TCP keeaplives选项吗?我认为您的应用程序可能没有显式地设置keepalive选项。一种方法是使用get socket选项并传递SO_TCPKEEPALIVE来检查是否确实设置了keepalive。如果没有设置,请继续设置。

你可能会发现这个讨论很有帮助:How to use SO_KEEPALIVE option properly to detect that the client at the other end is down?

票数 0
EN

Stack Overflow用户

发布于 2013-09-11 06:59:11

默认情况下,保持连接处于禁用状态。您必须启用它,在您的情况下,在服务器端,每个套接字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18721966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档