2011-01-07 11 views
3

1)プロセスが終了するまで、ソケットはLocalEndPointからバインド解除されていないようです。
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)グーグルでのビットの後、私はポートのバインドを解除することができるように見えることはできません、したがって、十分な量の接続クライアントがある場合、私は最終的にポートを使い果たして待機します。

+0

"その他の質問"とは何ですか? – Gabe

答えて

7

接続しているクライアントのソケットがサーバーソケットと混同されている可能性があります。

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

"ポートをアンバインド"するには、サーバソケットをシャットダウン/終了する必要があります。

アップデートは.Listen()への呼び出しに続いて、いくつかの混乱

あなたが上.Bind(エンドポイント)に電話をかけた「サーバ」ソケットを持っている必要がありますが、クリアします。これはシャットダウン/クローズして "アンバインド"し、後で使うためにポートを解放するソケットです。

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

外し、残り不要なを削除

  • 閉じる

    • シャットダウン:あなたが実際にメソッドをダウントリムすることができます。

  • +0

    私はちょうど接続を殺す方法を疑問に思っていて、ユーザーが不安全に切断したり、切断したりするときにポートを解放します。編集:私が潜在的に閉じたいソケットは、多くのクライアントソケットの1つになります。 ATM潜在的なクライアントを待ち受ける1つのソケットがあると、クライアントは1つのポート/ 1つのポートに接続できるクライアントが1つしかないと考えると、再接続するポート番号を受け取ります。 (私は思う) – ryan1894

    +0

    あなたの "潜在的なクライアントを聴いている"ソケットは、ある時点で.Bind()を呼び出していましたか?エンドポイントを指定した場所(ポートが関連付けられているはずです)そのポートは、クライアントが接続しなければならない単一のポートです(そして、単一のポートに多数のクライアントソケットを接続できます)。あなたが**できないのは、**第2サーバーソケット**を開始することです**あなたが**最初の**サーバーをバインド解除するまで(その最初のソケットを閉じることによって)同じEndPoint上の接続を待ちます。 – Sapph

    +0

    "(最初のソケットを閉じることによって)最初のサーバーをバインド解除するまで。これはまさに私が問題を抱えていることです。EDIT:状況は次のとおりです。私はポート5900でリッスンしています。接続は受け取りました - > 5901に再接続してください。クライアントは切断されるので、5901を解放しようとします - >次に再バインド - >例外を試みてください – ryan1894

    関連する問題