go使用tcp进行通信的keepalive问题

发布于 2022-09-13 01:01:55 字数 486 浏览 26 评论 0

我现在用SocketTool在192.168.37.1上开启一个tcp服务器,这个服务器接收到连接请求后什么都不做
SocketTool:
在192.168.37.131上使用go语言编写客户端去连接192.168.37.1上的服务器并循环读取数据,由于服务器没发送数据,所以不会收到数据,我使用wireshark进行抓包发现192.168.37.131上的客户端一直在发送tcp keepalive心跳包给192.168.37.1的服务器,我在网上查询tcp的keepalive是默认不开启的,而且网上说的是服务器给客户端发送tcp keepalive包,并且时间也是要2小时以后,我不明白为什么我这儿是客户端给服务器发送keepalive包,并且时间也是十几秒后就发送了
go客户端代码:

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

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

发布评论

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

评论(2

究竟谁懂我的在乎 2022-09-20 01:01:55

怀疑是client使能了keepalive

请贴出client代码

紙鸢 2022-09-20 01:01:55

你翻一下net.Dial的源码就知道了, 源码的注释写的很清楚了, 如果没有设置KeepAlive, 默认就是每隔15s发一次心跳, 如果KeepAlive设置为负数,就不会发心跳了

// For Unix networks, the address must be a file system path.
func Dial(network, address string) (Conn, error) {
    var d Dialer
    return d.Dial(network, address)
}

Dialer 的结构(这里省略掉了其他字段):

type Dialer struct {
    // KeepAlive specifies the interval between keep-alive
    // probes for an active network connection.
    // If zero, keep-alive probes are sent with a default value
    // (currently 15 seconds), if supported by the protocol and operating
    // system. Network protocols or operating systems that do
    // not support keep-alives ignore this field.
    // If negative, keep-alive probes are disabled.
    KeepAlive time.Duration
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文