Golang中如何在不读取数据的情况下检查net.Conn是否可用

Golang中如何在不读取数据的情况下检查net.Conn是否可用 我正在使用一个服务器库,它从套接字读取数据并将数据路由到用户的处理程序。除了数据之外,它还传递 net.Conn(tls.Conn 或 net.TCPConn)。

给定 net.Conn 对象,作为最终用户,我能否以一种可移植的方式判断连接是否仍然有效,而无需进行非零读取?可以安全地假设服务器正在持续读取,并最终会遇到 EOF。

至少在 Darwin 系统上,从已关闭的 tls.Conn 进行零读取不会显示 EOF,即使之前有一个非零读取遇到了问题:

package main

import (
	"crypto/tls"
	"fmt"
)

func main() {
	conn, err := tls.Dial("tcp", "127.0.0.1:8853", &tls.Config{
		InsecureSkipVerify: true,
	})
	if err != nil {
		fmt.Println(err)
		return
	}
	conn.Close()
	i, err := conn.Read(make([]byte, 1))
	fmt.Println(i, err) // 0 read tcp 127.0.0.1:60604->127.0.0.1:8853: use of closed network connection
	i, err = conn.Read(make([]byte, 0))
	fmt.Println(i, err) // 0 <nil>
}

所以我认为这是行不通的。在不改变套接字状态的情况下,还有其他方法可以做到吗?在我的使用场景中,轮询某些属性是可以接受的。


更多关于Golang中如何在不读取数据的情况下检查net.Conn是否可用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

回到顶部