C++03 プログラムで書き込みを行っている TCP 経由のソケットがあります。場合によっては、write() の結果がゼロになることがあります。write(2) の man ページには、次のように記載されています。
成功すると、書き込まれたバイト数が返されます (ゼロは何も書き込まれていないことを示します)。エラーの場合は -1 が返され、errno が適切に設定されます。
それで、ゼロは本当にエラーがないことを意味し、すべてが書き込まれるまで write をもう一度呼び出す必要がありますか? 言い換えれば、書き込まれたバイト数がcount
書き込みに渡したバイト数よりも少ない部分書き込みの場合と同じように、ゼロを処理して、合計書き込みcount
バイト数に達するまで試行し続ける必要がありますか?
書き込みが連続してゼロを返し、まったく進行しないという無限ループに陥らないようにしたいのです。write を呼び出す前にファイル記述子の準備が整っていることを確認するために、最初に select() を呼び出す必要がありますか? ファイル記述子でブロッキングを有効にしました。