33

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

4

1 に答える 1

59

TCP接続が一方の側で閉じられると、もう一方の側のread()は0バイトを返します。

于 2010-03-10T12:57:12.953 に答える