gpt4 book ai didi

c++ - 检测 TCP 客户端断开连接

转载 作者:IT老高 更新时间:2023-10-28 12:11:54 26 4
gpt4 key购买 nike

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

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

最佳答案

在 TCP 中,只有一种方法可以检测到有序断开连接,即从 read()/recv()/recvXXX() 获取零作为返回值。阅读时。

也只有一种可靠的方法可以检测断开的连接:通过写入。在对断开的连接进行足够多的写入后,TCP 将进行足够多的重试和超时以知道它已断开并最终导致 write()/send()/sendXXX()errno/WSAGetLastError() 返回 -1 ECONNRESET, 的值或在某些情况下“连接超时”。请注意,后者与“连接超时”不同,后者可能发生在连接阶段。

您还应该设置一个合理的读取超时,并丢弃失败的连接。

这里的答案是关于 ioctl()FIONREAD是竞争废话。所做的只是告诉您套接字接收缓冲区中当前有多少字节可以在没有阻塞的情况下读取。如果客户在五分钟内没有向您发送任何内容,这并不构成断开连接,但确实会导致 FIONREAD为零。不一样的东西:甚至不接近。

关于c++ - 检测 TCP 客户端断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/283375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com