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

在 Go 中,我从拨号器创建连接(有超时):


d := net.Dialer{Timeout: timeout, LocalAddr: *localAddr}

c.conn, err = d.Dial("tcp", address)

但是,我也可以设置连接的截止日期:


 c.conn.SetDeadline(time.Now().Add(timeout));

这是多余的,还是在这里设置超时和截止日期有功能差异?


三国纷争
浏览 191回答 1
1回答

蝴蝶刀刀

这些是完全不同的。net.Dialer用于建立连接。期限(或超时)适用于连接建立。分别引用Timeout和Deadline字段的文档:超时是拨号等待连接完成的最长时间。截止日期是拨号失败的绝对时间点。另一方面,net.Conn持有已建立的连接。超时适用于连接上的读/写操作。这在文档中也明确说明net.Conn:SetDeadline 设置与连接关联的读取和写入期限。这相当于同时调用 SetReadDeadline 和 SetWriteDeadline。请注意,这是一组常见的超时(除其他外):一个用于建立连接,另一个用于对已建立的连接进行操作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go