前回、ローカルポートの固定方法をご説明しましたが、
今回は、ローカルポートを固定することによって起こった問題をご紹介します。

通常のTCP/IP通信を行うにあたって、ローカルポートの固定設定を行っても、
なんら弊害はないのですが、通信異常がおこりクライアント側でコネクションを切断し、
再度接続する場合に、接続出来ない問題が発生します。

なぜ、接続できないかと言いますと、サーバ側でcloseしたソケットがTIME_WAIT状態になりしばらくの間破棄出来ないからで、破棄できない原理としては下記になります。

 最終的にコネクションがクローズした時、
 コネクションを確立し、データ伝送を実行後、
 アクティブクローズ(先にクローズ要求を出した)側と
 パッシブクローズ側でのやりとりは、
  アクティブ側      パッシブ側
       → ①FIN →
       ← ②ACK ←
       ← ③FIN ←
       → ④ACK →
 で終了します。
 
 このとき、パッシブ側は、自分の出した③FINに対して、
 ④ACKが確認できない場合、TIME_WAITとなり、
 通常、2~4分後、クローズ終了となります。

ローカルポートを設定していなければ、再接続時に前回と違うポートで接続しますので、問題なく接続出来ます。