3

TcpListenerインスタンスでStart()メソッドを呼び出すサービスがあります。このリスナーは、一般的ではなく、他のサービスによって使用されることが知られていないポートを使用しています。ごくまれに、1分間程度の間、奇妙なエラーが発生します。しばらくの間、サービス(失敗するとすぐに再起動します)は、次の例外で連続してクラッシュします。

   SocketException
   at System.Net.Sockets.Socket.DoBind(System.Net.EndPoint, System.Net.SocketAddress)
   at System.Net.Sockets.Socket.Bind(System.Net.EndPoint)
   at System.Net.Sockets.TcpListener.Start(Int32)
   at MyTestServer.Server.StartListening()

次のような例外メッセージがあります。

Only one usage of each socket address (protocol/network address/port) is normally permitted

この記事は、私がポートの枯渇を経験しており、WinSockのタイムアウトとポート範囲の値を変更するためにレジストリを微調整する必要があることを示唆しています。これはすべて問題ありませんが、接続しているクライアントは50〜100台しかありません(または接続する予定です)。どうすればポートが不足する可能性がありますか?ボットとポートスキャナー?

4

1 に答える 1

4

そのポストにあったように、それはおそらくポートの枯渇ではありません。彼らはWCF(TCPClientのようになります)と接続していました。TCPポートにバインドし、接続を待機しています。厳密には同じではありません。特定のTCPポート番号にバインドしています。このメッセージを受け取ると、windowsは(正しくまたはそうではなく)それが使用中であると見なします。Windowsは、別のプロセスがすでにそのポートにバインドされていることを報告しているため、バインドできません。ポートを使用しようとして2つのプロセスがあり、この問題が発生する可能性があるため、50〜100の数字は問題ではありません。

この問題を別の場所で引き起こしているか、この問題を引き起こしている他のアプリケーションがあります。

サービスで問題が発生し、TCPListener.Stop()を呼び出さずに停止した場合、サービスは自動的に再起動します。Windowsはプロセスが完了したことを認識していない可能性があるため、ポートにバインドできません。

さらに詳しく説明するには、詳細を投稿する必要があります。

于 2012-06-04T15:20:38.913 に答える