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

ポイント16「TCPの正規解放操作について理解する」まで。正規解放操作とはデータが全て受信できることを保証しながらコネクションを切断することです。例えば、クライアントからデータを送って、サーバーがそれに対するレスポンスを返す場合、クライアント側が勝手にソケットを閉じてしまうと、サーバー側が送り返せずに困ってしまいます。勿論、サーバ側が送り返してくるデータが把握できている場合は、それを受け取ってからソケットを閉じれば良いです。しかし、例えばクライアントに切断ボタンがあり、それを押したタイミングで安全に送受信させる場合は、先ほどのやり方では上手くできません。ではどうすれば良いかというと、

  1. クライアント、サーバー共に送信側を閉じる(shutdown)
  2. 既に送信されているデータを全て受信する
  3. ソケットの切断

という手順を踏めば良いらしいです。ところで本に書いてあるサンプルコードでは明示的にソケットをクローズしていません。確かにOSが解放してくれますが、それに任せるのはちょっと好みじゃないです。それとも、何らかの理由があって明示的にクローズしてないのでしょうか・・・

うーむ、なんか昔書いたソケットプログラム、思いっきり間違えていた気がする(^^;