ソケットを非ブロッキングにしない限り、read()がブロッキング呼び出しであることはわかっています。したがって、4Kのデータを要求するread()呼び出しは、正の値(バイト数の読み取りなし)またはエラー時に-1(クライアントによる接続のリセットなど)を返すはずです。私の質問は:read()はいつでも「0」を返すことができますか?
私はこのようにread()を処理しています:
if ((readval = read(acceptfd, buf, sizeof(buf) - 1)) < 0)
{
}
else
{
buf[readval] = 0;
//Do some thing with data
}
このコードは、read()がゼロを返した場合に攻撃され、修正方法を知っています。しかし、read()がゼロを返すことは可能ですか?
TCP接続が片側で閉じられている場合、反対側のread()は0バイトを返します。