什麼會導致套接字send()
命令上的Resource temporarily unavailable
錯誤?該插座設置爲AF_UNIX, SOCK_STREAM
。它大部分時間都在使用,但偶爾會出現這個錯誤。插座的接收端似乎正常工作。什麼會導致sock send()命令中的「資源暫時不可用」
我知道這不是很詳細,但我只是在尋找一般的想法。謝謝!
什麼會導致套接字send()
命令上的Resource temporarily unavailable
錯誤?該插座設置爲AF_UNIX, SOCK_STREAM
。它大部分時間都在使用,但偶爾會出現這個錯誤。插座的接收端似乎正常工作。什麼會導致sock send()命令中的「資源暫時不可用」
我知道這不是很詳細,但我只是在尋找一般的想法。謝謝!
"Resource temporarily unavailable"
是對應於EAGAIN
的錯誤消息,這意味着該操作將被阻止但請求非阻塞操作。對於send()
,這可能是由於任何的:
fcntl()
阻塞;或MSG_DONTWAIT
標誌傳遞給send()
;或SO_SNDTIMEO
套接字選項設置發送超時。我的問題的原因是設置發送超時。謝謝你的幫助! – giroy
@caf,在我的情況下,兩端的不同MTU大小配置導致sctp關聯Txqueue在高速數據包交換髮生時被溢出。 使兩個系統上的MTU相同使問題消失。 但是誰能解釋一下這個問題背後的原因? –
這是因爲您使用的是non-blocking
套接字並且輸出緩衝區已滿。
從send()
手冊頁
When the message does not fit into the send buffer of the socket,
send() normally blocks, unless the socket has been placed in non-block-
ing I/O mode. In non-blocking mode it would return EAGAIN in this
case.
EAGAIN是錯誤代碼綁「資源暫時不可用」
考慮使用select()
得到更好的控制,這種行爲
這個答案也很有幫助。謝謝! – giroy
這是相關的嗎? http://stackoverflow.com/questions/5737493/sendto-resource-temporarily-unavailable-errno-11 – paddy
你是否將套接字設置爲O_NONBLOCK? –
我不認爲它與那篇文章有關。我的套接字是SOCK_STREAM,我相信這是我想要的。 – giroy