3

私のプログラムでは、ノンブロッキング ソケットでの sendfile() 操作の完了を確認する必要があります。どうすればそれができますか?

ドキュメントを確認し、インターネットで検索した後、その方法を見つけることができませんでした

4

1 に答える 1

6

これは と非常によく似た動作をsend()します: ソケットが に設定されO_NONBLOCK、操作がブロックされる場合、sendfile()すぐに戻り、 に設定errnoされEAGAINます。この場合、しばらく待ってから再試行する必要があります (select()準備が整ったことを確認する関数を使用するなど)。

また、成功したとしても、1 回の関数呼び出しで要求したすべてのバイトを書き込めない可能性があることに注意してください。常に戻り値を確認してください。

転送が成功した場合、out_fd に書き込まれたバイト数が返されます。エラーの場合は -1 が返され、errno が適切に設定されます。

sendfile()のマニュアルページもご覧ください。

于 2009-12-20T14:54:52.787 に答える