为了账号安全,请及时绑定邮箱和手机立即绑定

是否将 net.Dialer 上的超时和 Connection 上的最后期限设置为相同的行为?

是否将 net.Dialer 上的超时和 Connection 上的最后期限设置为相同的行为?

Go
三国纷争 2022-06-27 17:01:10
在 Go 中,我从拨号器创建连接(有超时):d := net.Dialer{Timeout: timeout, LocalAddr: *localAddr}c.conn, err = d.Dial("tcp", address)但是,我也可以设置连接的截止日期: c.conn.SetDeadline(time.Now().Add(timeout));这是多余的,还是在这里设置超时和截止日期有功能差异?
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

这些是完全不同的。

net.Dialer用于建立连接。期限(或超时)适用于连接建立。分别引用TimeoutDeadline字段的文档:

超时是拨号等待连接完成的最长时间。

截止日期是拨号失败的绝对时间点。

另一方面,net.Conn持有已建立的连接。超时适用于连接上的读/写操作。这在文档中也明确说明net.Conn

SetDeadline 设置与连接关联的读取和写入期限。这相当于同时调用 SetReadDeadline 和 SetWriteDeadline。

请注意,这是一组常见的超时(除其他外):一个用于建立连接,另一个用于对已建立的连接进行操作。


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信