ソケットプログラミングのお勉強その3

ポイント9「TCPは信頼できるプロトコルだが、絶対に誤りがないとは言い切れないことを認識する」まで。TCPは信頼性のあるプロトコルと言われているのですが、信頼性があるというキーワードを漠然と認識していただけでした。TCPは送ったデータが全て相手に届くことを保証しているのではなく、届いたデータが正しい順序で、(チェックサムで検出出来る範囲で)破損せずにたどり着くことです。こんなのは駄目。

  1. ネットワークが切れてたらアウト
  2. 相手アプリケーションがハングってもアウト
  3. 相手OSが死んでてもアウト

まぁ、このように列挙してみると当たり前に見えますね。では、送信側はこのような状況に見舞われたらどーなってしまうのでしょうか?
まず、送信側へ問題が起こったことを知らせることが出来るのは2のケースのみです。ネットワークが切れてたりOSが死んでれば情報を送り返すことは出来ないですよね。しかし、問題が起きたことを知らせてくれても、送信側がそれを読み込まないと認識されません。つまり送信ばっかりなアプリの場合、問題に気づかず更に送信を行って、シグナルが発生して異常終了してしまいます。1,3の場合は、受信時ならタイムアウト、送信時ならシグナル発生となります。

わたしゃ全然分かってないです。がんばろ・・・