時々私は0を得ているように見えます。つまり、私が得たのはヘッダーでした。つまり、FINを受け取ってそのソケットを閉じると仮定する必要がありますか?TCPソケットを使用して読み込み呼び出しから0を取得すると、FINが受信されたことを意味しますか?
ありがとうございます!
時々私は0を得ているように見えます。つまり、私が得たのはヘッダーでした。つまり、FINを受け取ってそのソケットを閉じると仮定する必要がありますか?TCPソケットを使用して読み込み呼び出しから0を取得すると、FINが受信されたことを意味しますか?
ありがとうございます!
はい。ゼロとは、一般的に、ファイルの終わりを意味します。 「ファイルの終わり」とは、使用しているファイル記述子の種類によって異なります。
TCPソケットの文脈では、私があなたがゼロを読むことができることを知っている唯一の方法は、FINが受信されたかどうかです。対照的に、RSTが受信された場合、read()
は-1
をerrno == ECONNRESET
と返します。
私はあなたががFIN
パケットを得ている必要がありますが、あなたが正しい秒カウントにしているかどうか(私の頭の上から)知りません。
リターンコードが0の場合は、ソケットのコンテキストではそれ以上データが存在しないことを意味するファイルの終わりを意味します。
ソケットがまだ接続されていて、リモート側が閉じていない場合でも、読み取りから0を得ることができます。これは、カウントとして0を渡す場合に発生します。
ええ、ノンブロッキングモードを忘れました...特別なケース:-) – Archie
ノンブロッキングモードは、 'EAGAIN'で-1を返します。 –
またはむしろ 'EWOULDBLOCK'。 –