68user's page 掲示板

Prev< No. 4027〜4028> Next  [最新発言に戻る] [過去ログ一覧]
No. 4027 # 68user 2004/10/28 (木) 19:21:13
>>4025 ken
要は、ピアが送信したデータが全部届いたことを確認したいのですか?
それならば、TCP/IP のレベルではなくアプリケーションのプロトコル
レベルで実現するのが普通です。

例:
    - 送信側は「データ長 + データ」を送信。受信側は最初に受け取った
        データ長の分だけデータを受信したら、全データ到着とみなす。
    - 改行コードをプロトコルのひとまとまりとみなす。送信側は
        データの末尾に改行コードをつけて送信。受信側は改行コードを
        受け取ったら全データ受信とみなす。

端的に言うと、
    recv の戻り値が 0 = FIN が届いたとき
です (ノンブロッキングモードなどの例外はあるかと思いますが)。

で、FIN を投げるには close か shutdown する必要があるということです。

No. 4028 # ken 2004/10/29 (金) 11:47:04
レスありがとうございました。m(__)m
>要は、ピアが送信したデータが全部届いたことを確認したいのですか?
はい。
>それならば、TCP/IP のレベルではなくアプリケーションのプロトコル
>レベルで実現するのが普通です。
httpサーバーにつなげてhtmlを受信した場合に受信終了時にrecv()戻り値が
0を送っていたのは、shutdown()がかかっていたと判断していいのでしょうか?
だとすれば、再度htmlを受信する場合は、再度acceptでsocketを作成して受信
開始する必要があるのかテストする必要を感じました。

何度もレスいただきましてありがとうございました。

Prev< No. 4027〜4028> Next  [最新発言に戻る] [過去ログ一覧]