登录
首页 >  Golang >  Go问答

tls.Conn缺少CloseRead() / CloseWrite()的实现

来源:stackoverflow

时间:2024-02-16 09:51:23 164浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《tls.Conn缺少CloseRead() / CloseWrite()的实现》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

我目前正在尝试将 Go 服务器从使用 net.TCPConn 切换为使用 tls.Conn 进行 API 调用。我遇到的问题是我的服务器依赖于 net.TCPConn 独立关闭读写连接的能力(通过 net.TCPConn.CloseRead()net.TCPConn.CloseWrite() ),该功能不是在 net.Conn 级别或 tls.Conn 实现中实现。*

* 我知道 tls.Conn 确实有 Clos​​eWrite() 的实现,但在幕后此方法仅调用 SetWriteDeadline() 并且不关闭文件描述符,这是我需要的功能。

我的问题如下:

  1. net.Conn 中没有实现 Clos​​eRead()Clos​​eWrite() 是否有特定的设计原因?看起来 net.Conn 的实现对这些方法的定义几乎相同。
  2. 为什么 tls.Conn 中没有实现这些方法来关闭文件描述符?

预先感谢您的回复!


正确答案


依靠这一点通常是为了向对等方发出信号,表示在仍然能够接收数据的同时不会再发送任何数据。此功能是 TCP 特有的,其中一方可以在仍然接收数据的同时发送 FIN 来表示传输结束。

由于它不是网络连接的通用功能,而是特定于 TCP 的,因此在通用 net.conn 中为此提供接口是没有意义的。类似的 TLS 也没有单侧关闭后只读连接的概念 - 有关详细信息,请参阅 boost ssl half close socket is possible?

本篇关于《tls.Conn缺少CloseRead() / CloseWrite()的实现》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>