在Go中,我从拨号程序创建连接(超时(:
d := net.Dialer{Timeout: timeout, LocalAddr: *localAddr}
c.conn, err = d.Dial("tcp", address)
然而,我也可以设置连接的截止日期:
c.conn.SetDeadline(time.Now().Add(timeout));
这是多余的,还是在这里设置超时和截止日期有功能差异?
这些完全不同。
网。拨号程序用于建立连接截止日期(或超时(适用于连接建立。分别引用Timeout
和Deadline
字段的文档:
Timeout是拨号等待连接以完成。
Deadline是一个绝对的时间点,在该时间点之后,拨号将失败
另一方面,一个网络。Conn保持已建立的连接超时适用于连接上的读/写操作。net.Conn
:的文档中也明确说明了这一点
SetDeadline设置与联系它相当于同时调用SetReadDeadline和SetWriteDeadline。
请注意,这是一组常见的超时(以及其他超时(:一组用于连接建立,另一组用于已建立连接上的操作。