1

重複の可能性:
Linuxでソケットの空のバッファーを送信しますか?

接続しているクライアントにデータを送信するソケットサーバーを作成し、クライアントを再度切断したいと思います。

ノンブロッキングソケットを使用しているので、すべてのデータが少なくとも正しく送信(送信?)されているかどうかを確認する方法がわかりません(つまり、送信バッファーにデータがありません)。クライアントが自分で切断することを保証できないため、接続が不要になった場合は、接続を確立したままにしたくありません。

現在、shutdown()と後でclose()を使用してクライアントをシャットダウンしています。しかし、テストの結果、接続が閉じられる前にクライアントがすべてのデータを受信するとは限らないことがわかりました。

非ブロッキングソケットで接続を閉じる前に、すべてのデータが送信されたことを確認する方法も必要です。私の質問が十分に明確であり、あなたが私を助けることができることを願っています(:

4

2 に答える 2

3

接続を終了する前にデータが送信されたことを知る唯一の方法は、ピアがアプリケーション プロトコルでそれを確認することです。両端で出力のためにシャットダウンし、両端で EOS を読み取り、両端でソケットを閉じることにより、両端が同時に EOS に到達することを保証できます。

于 2012-09-21T11:59:35.603 に答える
0

ファイルのデータの前にファイルサイズを送信できます。ソケットを閉じている間は、ファイルのサイズを確認し、ファイルを閉じるか再送信するための適切なアクションを実行してください....

于 2012-09-24T11:07:32.830 に答える