私は現在select()タイムアウトでブロッキングソケットを使用するアプリケーションで作業していますが、Write関数ではsend()で非ブロッキングソケットを使用しています。私はちょうど(そしてすべての)状況がEWOULDBLOCK/EAGAINを返送することを知る必要がありますか? send()
ためいつsend()がEWOULDBLOCKを返しますか?
1
A
答えて
2
、Linuxのmanページは言う:
ソケットが ノンブロッキングI/Oに配置されていない限り、メッセージは、 送信()は通常のブロック、ソケットの送信バッファに収まらない場合にはモード。ノンブロッキングモードでは、この場合はエラー EAGAINまたはEWOULDBLOCKで失敗します。 select(2)呼び出しを使用して、より多くのデータをいつ送信できるかを決定するために を使用することができます。
と
戻るEAGAINまたはEWOULDBLOCK値:ソケットがノンブロッキングにマークされ、 要求された操作はブロックされます。 POSIX.1-2001では、この場合には のエラーが返され、これらの定数は に同じ値を必要としないため、ポータブルアプリケーションは の可能性をチェックする必要があります。
関連する問題
- 1. TCP send()がブロックしています
- 2. ノンブロッキングソケットのselect()、recv()、EWOULDBLOCK
- 3. WinSockのsend()は常に0バイトを返します。
- 4. Http send()リクエストで値が返されない
- 5. winsock blocking send()はどのような条件で0を返しますか?
- 6. Excel Send As Attachmentがファイルのキャッシュバージョンを送信しています
- 7. ブール値が1つしかない行を返します
- 8. Socket.IO send()が動作しない
- 9. なぜIOLibの "receive-from"関数は常にEWOULDBLOCK例外をスローしますか?
- 10. python - クラスの.send()をサポートしていますか?
- 11. Go:いつjson.Unmarshalが構造体にエラーを返しますか?
- 12. Receive/SendアクティビティでxamlxにObjectDisposedExceptionがスローされましたか?
- 13. JavascriptはWebsocketの "send"コマンドが完了するのを待っていますか?
- 14. ASP.NET Web APIからいくつかのフィールドを返します
- 15. いつSystem.getProperty( "java.io.tmpdir")が "c:\ temp"を返します
- 16. ExecuteReaderが1つの値だけを返しています
- 17. は、read()またはsend()が<0?を返す場合は常にソケットを閉じます。
- 18. send()は常にバッファ全体を送信しますか?
- 19. facebook Sendダイアログにはモバイル版がありますか?
- 20. スレッド "main"の例外com.google.apphosting.api.ApiProxy $ CallNotFoundException:APIパッケージ 'mail'または 'Send()'が見つかりませんでした
- 21. WeakReference#get()はいつnullを返し始めますか?
- 22. ShowDialog()はいつnullを返しますか?
- 23. preferences.getString( "key"、 "DEFAULT")はいつも "DEFAULT"を返しますか?
- 24. SetupUninstallOEMInfはいつERROR_NO_MORE_ITEMSを返しますか?
- 25. NET SNMPのsnmp_synch_response()はいつSTAT_TIMEOUTを返しますか?
- 26. C#ラムダはいくつかのヌル値を返します
- 27. SqlCommand.ExecuteReader()はいつnullを返しますか?
- 28. ItemContainerGenerator.Status列挙はいつGeneratorStatus.Errorを返しますか?
- 29. ZipInputStream.getNextEntryはいくつかのzipファイルでnullを返します
- 30. GrailsのcookieService.getはいつもnullを返しますか?
私はこの質問を理解しているかどうか、あるいはドキュメントを理解していない可能性があります。 'send()'は、ソケットが非ブロッキングモードで、何らかの理由で呼び出しがブロックされた場合、 'EAGAIN'または' EWOULDBLOCK'を返します。仕様にはこれ以上の詳細は含まれておらず、詳細は実装固有のものになります。いくつかの実装では、メッセージ全体を収容するのに十分な空き領域が送信バッファにないことを意味しますが、バッファリングの詳細は実装固有です。 –
@JohnBollingerすべての実装について。送信バッファはドキュメントに記載されています。実装の詳細ではありません。 – EJP