如何判断网络客户端断开(客户端拔掉网线)
使用socket编程的时候,如何判断客户端非正常断开,例如客户端拔掉网线,
我使用的是非阻塞socket
ThankX
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
使用socket编程的时候,如何判断客户端非正常断开,例如客户端拔掉网线,
我使用的是非阻塞socket
ThankX
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(9)
如果有必要最好是发送心跳
或检测客户端心跳
TCP 的话,依赖 KEEPALIVE 吧。或者,在应用层协议中进行论询。
哪位大虾帮帮忙啊
难道就一定要使用“心跳”包吗?????????
谢谢斑竹
不过我还没有弄好
我用的是非阻塞的套节字,select返回0,然后我使用getsockopt
没有反应啊,我拔掉网线和正常是一样的阿,这个调用正常返回,而且opt始终是0啊
对,呵呵,我考虑欠周密,其实用select的方法更好一些^_^,谢谢指正
1 客户端拔掉网线,也就意味着客户端socket将关闭
2 socket可以把它比喻成一个管道,当管道的一边关闭时,你会收到一个signal,SIGPIPE
3 把SIGPIPE挂成sigaction的钩子
4 在SIGPIPE的处理函数中,做如下描述:
{
close( client_socket );
}
不会的
1 客户端拔掉网线,也就意味着客户端socket将关闭
不会的 这个和对方崩溃一样 你什么都得不到 TCPIP 75S 超时
看你是发送还是接收数据。发送数据时马上就能返回错误。接收数据时如果你以非阻塞的方式接收,可以在select()返回时通过getsockopt()判断。
1 客户端拔掉网线,也就意味着客户端socket将关闭
2 socket可以把它比喻成一个管道,当管道的一边关闭时,你会收到一个signal,SIGPIPE
3 把SIGPIPE挂成sigaction的钩子
4 在SIGPIPE的处理函数中,做如下描述:
{
close( client_socket );
}
这个比较难判断.
如果自己网线拔掉还可以借鉴mii-tool的源代码.
不知道服务器端在设计的时候是否采用了 发"心跳"的方式. 如果是那样可以判断出非正常的断开连接.