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

golang conn.setdeadline 是只为下一次操作还是永远?

golang conn.setdeadline 是只为下一次操作还是永远?

Go
温温酱 2023-01-03 09:59:03
在下面的代码中: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())。


查看完整回答
反对 回复 2023-01-03
  • 1 回答
  • 0 关注
  • 369 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号