在Linux中,socket()
函數可能會失敗,並且EINPROGRESS
是否可能?請注意,我特別詢問了socket()
,而不是connect()
或其他人。套接字()能否通過EINPROGRESS失敗
POSIX未列出EINPROGRESS
作爲可能的錯誤代碼。但是,Linux中的socket()
的聯機幫助頁說:
其他錯誤可能由基礎協議模塊生成。
是否有任何情況下該調用實際上可能會失敗EINPROGRESS
?
在Linux中,socket()
函數可能會失敗,並且EINPROGRESS
是否可能?請注意,我特別詢問了socket()
,而不是connect()
或其他人。套接字()能否通過EINPROGRESS失敗
POSIX未列出EINPROGRESS
作爲可能的錯誤代碼。但是,Linux中的socket()
的聯機幫助頁說:
其他錯誤可能由基礎協議模塊生成。
是否有任何情況下該調用實際上可能會失敗EINPROGRESS
?
EINPROGRESS表示操作正在進行中。它會因爲外部原因而阻塞:等待遠程操作或本地設備。
socket()僅在系統內存中創建條目:沒有理由等待任何遠程動作或任何設備。
但是,如果它能夠返回EINPROGRESS,你就沒有什麼可以等待的。
使用文件句柄和套接字句柄,可以使用select()等待系統準備就緒。但是如果socket()本身沒有返回任何東西,那麼你沒有什麼可以等待的。
我沒有看到socket()返回EIPROGRESS的理由,但無論如何這將是一個壞主意。
也許不是你要找的答案:
你必須檢查相應的Linux kernel source code(kernel/net/socket.c
)throughly是100%肯定。瀏覽代碼,它看起來不像EINPROGRESS
在任何地方返回。但是,在那裏有依賴於運行時的調用,所以很難說僅僅來自靜態代碼分析。
我看不出如何。沒有什麼可以進行的。沒有涉及的I/O:只是創建一個套接字FD。你爲什麼要問? – EJP
我認爲這裏的聯機幫助頁是明確的:可能有協議,實際上,_do_在調用socket()時返回'EINPROGRESS'。但是沒有一個常用的協議是這樣做的。那麼返回引用filedescriptor是不可能的,所以它必須是一個嚴重的錯誤,這與EINPROGRESS的含義有些衝突 – Ctx