質問

1)ソケットは、プロセスが終了するまでローカルエンドポイントからバインドされていないようです。
2)私は他の質問から解決策を試しましたが、また1分間待ってみました - 役に立たなかった。
3)ソケットとその接続を取り除くために以下を試してみました。

public static void killUser(User victim)  
    {  
        LingerOption lo = new LingerOption(false, 0);  
victim.connectedSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.Linger,     lo);  
        victim.connectedSocket.Shutdown(SocketShutdown.Both);  
        victim.connectedSocket.Disconnect(true);  
        victim.connectedSocket.Close();  
        clients.RemoveAt(victim.ID);  
    }  

4)少しグーグルでグーグルで、ポートを外すことができないように思われるため、十分な量の接続クライアントがあれば、最終的にはポートを使い果たして耳を傾けます。

役に立ちましたか?

解決

接続されているクライアントのソケットをサーバーソケットと混同しているのではないかと思います。

サーバーソケットは、特定のポートで着信接続をリッスンするものです。その機能で閉じるソケットは、(潜在的に多くの)リモート接続の1つへのパイプです。

「ポートをバインドする」ために、シャットダウン/閉じることをお勧めします サーバ ソケット。

混乱を解消するために更新します

.bind(endpoint)に電話をかけた「サーバー」ソケットが必要で、その後、.listen()に電話がかかります。これは、「バインド」に近づき、後でポートを解放するソケットです。

次に、「サーバー」ソケットが新しい接続を受け入れるたびに参照を取得する複数の「クライアント」ソケットがあります。これらはすべて、問題なく同じポートにバインドできます。これらの接続の1つを閉じてクライアントを切断するには、今していることをしてください。実際にメソッドをトリミングできます。

  • シャットダウン
  • 選ぶ
  • リストから削除します

切断され、残りは不要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top