2012-03-17 1 views
2

私はepollをレベルトリガとして使用しています。 recv(3)によれば、recv0を返した場合、「メッセージを受信できず、ピアが正常にシャットダウンを実行しました。これは、要求全体が受信され、ソケットが反対側で閉じられていることを意味しますか?ソケットは両端で閉じられていますか?または、単にリクエスト全体が受信され、ソケットがレスポンスを待っているとしますか?どんな助けでも大歓迎です。epoll recv戻り値

What value will recv() returnによると、が0を返すように聞こえると、反対側で接続が閉じられます。このような場合は、epoll側で何をする必要がありますか? epoll_ctlEPOLL_CTL_DELを呼び出し、closeを呼び出してソケットを完全に取り外す必要がありますか?

答えて

4

接続を介して送信されたすべてのデータをすでに読み込んでいることを意味します。残りの唯一のものは、TCP FINです。これは、リモートで完全に閉じるか、リモート。ピアがシャットダウンしていることが分かっている場合を除き、この時点でソケットを閉じることはできません。その場合でも、ソケットに書き込むことはできます。あなたのアプリケーションプロトコルはそれをすべて決定します。

TCPには要求や応答のようなものはありません。単なる双方向のバイトストリームです。