首页 > 后端开发 > Golang > 如何在 Go 的 net 包中检测 TCP 连接关闭?

如何在 Go 的 net 包中检测 TCP 连接关闭?

Susan Sarandon
发布: 2024-12-16 21:52:15
原创
649 人浏览过

How Can I Detect TCP Connection Closure in Go's `net` Package?

如何使用 Net 包确定 TCP 连接关闭

问题:

实现时对于 TCP 服务器,了解客户端何时关闭连接至关重要。如何使用 net 包来确定这一点?

答案:

要检测关闭的 TCP 连接,可以使用以下方法:

one := make([]byte, 1)
c.SetReadDeadline(time.Now())
if _, err := c.Read(one); err == io.EOF {
  // Connection closed
} else {
  // Connection still open
}
登录后复制

此方法涉及:

  1. 创建单字节缓冲区(一)。
  2. 将连接 (c) 上的读取截止时间设置为当前时间,以强制立即读取。
  3. 从连接读取一个字节。
  4. 检查错误;如果是 io.EOF,则连接已关闭。

超时检测:

要检测超时,您可以检查错误是否为网络错误。超时错误。

if neterr, ok := err.(net.Error); ok && neterr.Timeout() {
  // Timeout occurred
}
登录后复制

更新(Go 1.7 ):

在 Go 1.7 中,零字节读取会立即返回并且不会导致错误。为了解决这个问题,有必要读取至少一个字节。

以上是如何在 Go 的 net 包中检测 TCP 连接关闭?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板