ソケットを非ブロッキングにしない限り、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()がゼロを返すことは可能ですか?