检测TCP客户端断开连接 [英] Detecting TCP Client Disconnect

查看:150
本文介绍了检测TCP客户端断开连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我正在运行一个简单的服务器,并且从客户端连接 accept()

Let's say I'm running a simple server and have accept()ed a connection from a client.

当客户端断开连接时,最好的方式是什么?通常,客户端应该发送关闭命令,但如果手动断开连接或完全失去网络连接怎么办?服务器如何检测或处理这个?

What is the best way to tell when the client has disconnected? Normally, a client is supposed to send a close command, but what if it disconnects manually or loses network connection altogether? How can the server detect or handle this?

推荐答案

select当您使用ioctl *来检查等待被读取的字节数时,它将为零。这是一个标志,套接字已断开。

select (with the read mask set) will return with the handle signalled, but when you use ioctl* to check the number of bytes pending to be read, it will be zero. This is a sign that the socket has been disconnected.

这是一个伟大的讨论,检查客户端已断开连接的各种方法: Stephen Cleary,检测半连接(已删除)连接

This is a great discussion on the various methods of checking that the client has disconnected: Stephen Cleary, Detection of Half-Open (Dropped) Connections.

*对于Windows使用ioctlsocket。

* for Windows use ioctlsocket.

这篇关于检测TCP客户端断开连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆