2017-12-01 16 views
0

サーバとして、非ブロッキングクライアントソケットから読み込み、ファイルに書きたいと思っています。sendfileは、入力ディスクリプタからの読み取りがブロックされているかどうかをチェックしないのはなぜですか?

sendfileのmanページによると、errnoがEAGAINに設定されている場合、出力ファイル記述子が非ブロックに設定されている場合、sendfileの呼び出しはブロックされます。

つまり、sendfileが書き込む基本的な呼び出しはブロックされます。

読み取りがブロックされる場合、errnoがEAGAINにな​​るようにsendfileを使用することはありますか?

答えて

2

確かに。

select()ライブラリ関数を読み取りディスクリプタで使用すると、EWOULDBLOCKerrnoで確認できます。設定されていると、読み取りがブロックされます。

sendfile()コールで何かをチェックすることで、読み取りがブロックされるかどうかはわかりません。