recv()
を定期的に呼び出すコードがあります(MSG_DONTWAIT
フラグ付き)。私はvtuneで自分のコードをプロファイリングするので好奇心が強いです。私はsigprocmask()
という呼出しがrecv()
に関連付けられているのを見ています。実行にはかなりの時間を要しています。私はなぜrecv()
がsigprocmask()
を呼んでいるのか不思議です。recvシステムコールを呼び出すときにsigprocmaskが呼び出されるのはなぜですか?
6
A
答えて
0
おそらくrecvは、シグナルがブロックされた場合に他の方法では見られない関連シグナルが生成されたかどうかを知ることができます。 EAGAIN/EWOULDBLOCKは、ブロックされる可能性のあるシグナルを使って時々生成されるerrnoの値として気になります。 sigprocmask
man pageを見ましたか?
1
linuxの下でTCPソケットを使って作業する場合、相手側が予期せず閉じられた場合、SIGPIPEを受信します。
あなたは、この信号をマスクすることができますので、(ほとんどの時間を、あなたは0の戻り値を自分で処理します、あなたは、この信号を気にしない)、私は信号状態のためシステムライブラリのチェックを推測、マスクされている場合は、より高速なコードパスを使用します。
そうでない場合、最適化することはできません。
ところで、あなたはpselect()について知っていますか?
関連する問題
- 1. strcpy()を呼び出すときに、対応するサブルーチン呼び出しがマシンコードのダンプで呼び出されないのはなぜですか?
- 2. onReceiveが呼び出されないときに呼び出される
- 3. C++システムコールでtskillを呼び出すことができない
- 4. viewWillDisplayearがpopToRootViewControllerAnimatedを呼び出すときに呼び出されない
- 5. mallocはシステムコールを呼び出さないのですか?
- 6. アプリケーションがバックグラウンドから呼び出されたときにメソッドを呼び出す
- 7. MSBuildスクリプトからdevenv.exeを呼び出すと、なぜVS2008のインストーラが呼び出されるのですか?
- 8. 謎:Qtでは、なぜeditorEventが呼び出されますが、createEditorは呼び出されませんか?
- 9. startActivityForResult()を呼び出すときにonDestroy()が呼び出されます
- 10. C#、WinForms:なぜRefresh()を呼び出すとOnPaintBackgroundが呼び出されないのですか?
- 11. afterRenderが呼び出されないのはなぜですか?
- 12. クラスが呼び出されないのはなぜですか?
- 13. -didDeselectRowAtIndexPathが呼び出されないのはなぜですか?
- 14. DefaultAnnotationHandlerMappingが呼び出されないのはなぜですか?
- 15. PostConstructが呼び出されないのはなぜですか?
- 16. BackgroundWorker.OnDoWorkが呼び出されないのはなぜですか?
- 17. ViewForAnnotationが呼び出されないのはなぜですか?
- 18. デリゲートメソッドが呼び出されないのはなぜですか?
- 19. メソッドが呼び出されないのはなぜですか?
- 20. アクションフィルタが呼び出されないのはなぜですか?
- 21. ASP.NETユーザーコントロールイベントが呼び出されたときにページイベントを呼び出す
- 22. なぜform.Hide()を呼び出すとフリッカーが発生しますが、form.Close()は呼び出されませんか?
- 23. glMatrixModeを呼び出すたびにglLoadIdentityを呼び出す必要があるのはなぜですか?
- 24. 暗黙の__getitem __-呼び出しで__getattribute__が呼び出されないのはなぜですか?
- 25. スレッドがシステムコールを呼び出すときのコンテキスト切り替え
- 26. 別のモデルを呼び出すときにsave()を呼び出すのはなぜですか
- 27. HTMLフォームからサーブレットを呼び出すがサーブレットは呼び出されない
- 28. なぜ擬似クラスが呼び出されるのですか?
- 29. なぜshouldHideViewControllerは呼び出されますが、willHideViewControllerは呼び出されませんか?
- 30. なぜQWidget :: paintEventが呼び出されないのですか?
この現象を再現する可能な限り小さなコードの関連トレースを確認できますか?デモコードも見ることができますか?信号マスクに何が行われているかを正確に見ることができます。 – pilcrow
'recv()'に対するこれらの呼び出しの文脈について詳しく説明できますか?どのようなソケットを使用していますか?あなたは 'recv()'を直接呼びますか? – alk