From c3637d2ad7c0b39ed69de4ecf3065c1cb6f5e549 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=A3=E5=90=9B?= Date: Fri, 9 Dec 2016 14:20:07 +0800 Subject: [PATCH] =?UTF-8?q?keepalive=E4=BD=9C=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit keepalive并不是为了让tcp保持长连接,而只是一种让操作系统可以自动检测连接意外断开的机制,一个连接保持长连接是因为建立之后没有断开,而不是因为设置了keepalive。 --- zh/08.1.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/zh/08.1.md b/zh/08.1.md index fc9a9ea8..3cc07558 100644 --- a/zh/08.1.md +++ b/zh/08.1.md @@ -302,8 +302,7 @@ TCP有很多连接控制函数,我们平常用到比较多的有如下几个 用来设置写入/读取一个连接的超时时间。当超过设置时间时,连接自动关闭。 func (c *TCPConn) SetKeepAlive(keepalive bool) os.Error - -设置客户端是否和服务器端保持长连接,可以降低建立TCP连接时的握手开销,对于一些需要频繁交换数据的应用场景比较适用。 +设置keepAlive属性,是操作系统层在tcp上没有数据和ACK的时候,会间隔性的发送keepalive包,操作系统可以通过该包来判断一个tcp连接是否已经断开,在windows上默认2个小时没有收到数据和keepalive包的时候人为tcp连接已经断开,这个功能和我们通常在应用层加的心跳包的功能类似。 更多的内容请查看`net`包的文档。 ## UDP Socket