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

在下面的代码中:


conn.SetDeadline(time.Now().Add(time.Minute)) 

//read/write operation, only once             

conn.SetDeadline(time.Time{})    //cancel deadline          

“取消”操作是否必要?即如果我不取消它,连接将在一分钟内超时,无论以下操作是否成功/失败?


又或者,SetDeadline命令只对紧接着的操作有效,操作成功后,deadline自动消失?


温温酱
浏览 370回答 1
1回答

慕田峪7331174

查看评论Conn interface// 截止日期是 I/O 操作// 失败而不是阻塞的绝对时间。截止日期适用于所有未来// 和挂起的 I/O,而不仅仅是紧随其后的对// Read 或 Write 的调用。超过截止日期后,// 连接可以通过在未来设置截止日期来刷新。如前所述,截止日期适用于“所有未来”I/O。如果您在截止日期过后使用连接,您将收到“一个错误包装os.ErrDeadlineExceeded”。如果您希望再次使用该连接,您需要将截止日期设置为未来值或零值(即conn.SetDeadline(time.Time{}))。重要的是要注意,超过截止日期不会关闭连接。收到后,os.ErrDeadlineExceeded您仍然可以设置新的截止日期(或清除截止日期)并继续发送/接收。您不应该假设收到错误意味着连接已关闭(如果这是您想要的,请确保您调用close())。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go