0

この質問は以前に尋ねられたことがありますが、これまでに見たすべての質問の細部が私を悩ませているので、私はそれを理解することができないようです...

TCPソケットサーバーを作成すると、接続を確立するとポートがX時間使用できなくなるという問題が発生し続けます(クライアントとの接続が確立されていない場合、問題なく終了後にプログラムを再実行できます) . これは明らかに、TCP が接続を切断する前に必要とするタイムアウトに関係しています。

サーバーとクライアントの両方のソケットで優先せずに close(socketfd) を使用しています...正常に終了した後、ソケットをすぐに使用できるようにする方法はありますか (fd で呼び出された close のように)、待機する必要はありません。何が永遠に見えるか、マシンを再起動しますか?

4

2 に答える 2

5

はい、関連するソケット オプションは呼び出されSO_REUSEADDRます。setsockopt()ソケットオプションを設定するために使用します。

ただし、通常はサーバーのメインソケットを閉じないでください。代わりaccept()に、クライアントが切断されたときに閉じることができるクライアントごとのソケットを作成するために使用する必要があります。

于 2013-04-03T13:01:30.150 に答える
1

ソケットは、閉じられた後、しばらく TIME_WAIT 状態のままになることがあります。この状態でソケットを再利用できるようにするためSO_REUSEADDR

于 2013-04-03T13:01:16.737 に答える