如何判断网络客户端断开(客户端拔掉网线)

发布于 2022-07-16 05:13:05 字数 71 浏览 12 评论 9

使用socket编程的时候,如何判断客户端非正常断开,例如客户端拔掉网线,
我使用的是非阻塞socket
ThankX

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

明月夜 2022-07-16 17:08:45

如果有必要最好是发送心跳
或检测客户端心跳

巨坚强 2022-07-16 17:08:44

TCP 的话,依赖 KEEPALIVE 吧。或者,在应用层协议中进行论询。

淡笑忘祈一世凡恋 2022-07-16 17:08:41

哪位大虾帮帮忙啊
难道就一定要使用“心跳”包吗?????????

野の 2022-07-16 17:07:51

原帖由 sunlan 于 2006-2-8 15:07 发表

看你是发送还是接收数据。发送数据时马上就能返回错误。接收数据时如果你以非阻塞的方式接收,可以在select()返回时通过getsockopt()判断。

谢谢斑竹

不过我还没有弄好
我用的是非阻塞的套节字,select返回0,然后我使用getsockopt
没有反应啊,我拔掉网线和正常是一样的阿,这个调用正常返回,而且opt始终是0啊

夜深人未静 2022-07-16 17:04:06

原帖由 benjiam 于 2006-2-8 19:45 发表
1 客户端拔掉网线,也就意味着客户端socket将关闭
2 socket可以把它比喻成一个管道,当管道的一边关闭时,你会收到一个signal,SIGPIPE
3 把SIGPIPE挂成sigaction的钩子
4 在SIGPIPE的处理函数中,做如下描述: ...

对,呵呵,我考虑欠周密,其实用select的方法更好一些^_^,谢谢指正

你怎么敢 2022-07-16 17:00:38

1 客户端拔掉网线,也就意味着客户端socket将关闭
2 socket可以把它比喻成一个管道,当管道的一边关闭时,你会收到一个signal,SIGPIPE
3 把SIGPIPE挂成sigaction的钩子
4 在SIGPIPE的处理函数中,做如下描述:
{
    close( client_socket );
}

不会的
1 客户端拔掉网线,也就意味着客户端socket将关闭
不会的 这个和对方崩溃一样 你什么都得不到 TCPIP 75S 超时

花之痕靓丽 2022-07-16 16:57:52

原帖由 supeiwang 于 2006-2-8 09:48 发表
使用socket编程的时候,如何判断客户端非正常断开,例如客户端拔掉网线,
我使用的是非阻塞socket
ThankX

看你是发送还是接收数据。发送数据时马上就能返回错误。接收数据时如果你以非阻塞的方式接收,可以在select()返回时通过getsockopt()判断。

不必在意 2022-07-16 14:45:34

1 客户端拔掉网线,也就意味着客户端socket将关闭
2 socket可以把它比喻成一个管道,当管道的一边关闭时,你会收到一个signal,SIGPIPE
3 把SIGPIPE挂成sigaction的钩子
4 在SIGPIPE的处理函数中,做如下描述:
{
    close( client_socket );
}

孤云独去闲 2022-07-16 12:03:56

这个比较难判断.
如果自己网线拔掉还可以借鉴mii-tool的源代码.

不知道服务器端在设计的时候是否采用了 发"心跳"的方式. 如果是那样可以判断出非正常的断开连接.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文