2

クライアントにデータを転送する TCP サーバー側アプリに取り組んでいます。

私が直面している問題は、サーバー側のアプリで、クライアントが切断され、どのデータが送信され、どのデータが送信されなかったかを調べようとすることです。

私の調査によると、それを見つけるには基本的に 2 つの方法があることがわかりました。

  • 1) ソケットから読み取り、FIN 信号が戻ってきたかどうかを確認する
  • 2) send 呼び出しで sigpipe シグナルを待機する

クライアントがランダムなデータを送信しないことを保証できないため、最初のソリューションは信頼できるとは思えません。

2 番目の解決策の問題は、X の次の呼び出しの後にのみ sigpipe を取得するため、sendどのデータが実際に送信され、どのデータが送信されなかったかを保証できないことです。SO および他のサイトで、sigpipe は への 2 回目の呼び出しの後にのみ来ることになっていることを読みましたsend。ローカルホスト経由でのみ送受信する場合はその動作を再現できますが、実際にネットワークを使用する場合は再現できません。

私の質問は、Xが変化する可能性があるのは正常かどうか、そしてそうであれば、その動作を変更するためにどのパラメーターを参照するか、またはTCPの性質のために信頼できない可能性があるかどうかです。

4

1 に答える 1