該io.Closer接口的文檔說:第一次調用后關閉的行為是未定義的。具體的實現(xiàn)可能會記錄他們自己的行為。anet.Conn的Close()功能呢?我可以安全地多次調用它嗎?具體來說,我想知道我是否可以defer c.Close()提前返回錯誤,但仍然顯式調用c.Close()而不是讓客戶端等待我完成后臺處理。
1 回答

慕蓋茨4494581
TA貢獻1850條經驗 獲得超11個贊
嗯,net.Conn
是一個接口,所以要看具體的實現(xiàn)。
我檢查了TCPConn
,UDPConn
和IPConn
structs 中的實現(xiàn)。它們似乎包含這個net.Conn
接口的實現(xiàn)。
這個實現(xiàn)將Close()
調用傳播到它的底層文件描述符,這意味著在 Unix 系統(tǒng)上這個函數(shù)會被調用。
我們必須走得更低,因為下一個調用是文件描述符使用的互斥鎖。
如果連接先前已關閉并釋放互斥鎖,則它似乎返回 false,并且文件描述符Close()
函數(shù)返回ErrNetClosing 錯誤。
所以,我可以自由地說,你不應該多次調用它,因為在我描述的這種情況下,它會返回一個錯誤。但它也可能不會在其他人中出錯。正如文檔所說 - 這是未定義的行為。
- 1 回答
- 0 關注
- 98 瀏覽
添加回答
舉報
0/150
提交
取消