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

