在下面的代码中:conn.SetDeadline(time.Now().Add(time.Minute)) //read/write operation, only once conn.SetDeadline(time.Time{}) //cancel deadline “取消”操作是否必要?即如果我不取消它,连接将在一分钟内超时,无论以下操作是否成功/失败?又或者,SetDeadline命令只对紧接着的操作有效,操作成功后,deadline自动消失?
1 回答

慕田峪7331174
TA贡献1828条经验 获得超13个赞
查看评论Conn
interface
// 截止日期是 I/O 操作// 失败而不是阻塞的绝对时间。截止日期适用于所有未来
// 和挂起的 I/O,而不仅仅是紧随其后的对
// Read 或 Write 的调用。超过截止日期后,
// 连接可以通过在未来设置截止日期来刷新。
如前所述,截止日期适用于“所有未来”I/O。如果您在截止日期过后使用连接,您将收到“一个错误包装os.ErrDeadlineExceeded
”。如果您希望再次使用该连接,您需要将截止日期设置为未来值或零值(即conn.SetDeadline(time.Time{})
)。
重要的是要注意,超过截止日期不会关闭连接。收到后,os.ErrDeadlineExceeded
您仍然可以设置新的截止日期(或清除截止日期)并继续发送/接收。您不应该假设收到错误意味着连接已关闭(如果这是您想要的,请确保您调用close()
)。
- 1 回答
- 0 关注
- 369 浏览
添加回答
举报
0/150
提交
取消