2011-06-24 12 views
4

最近.NETのソケットで作業していましたが、Socket.ExclusiveAddressUseの実際の使用方法は不思議です。私はMSDN documentationを読んだので、基本的な考え方(特定のIPアドレスとポートの組み合わせに1つのソケットだけをバインドできるようにする)を知っていますが、実際にそのプロパティーが実際に使用されていることによってちょっと混乱します。 ExclusiveAddressUseがfalseの場合Socket.ExclusiveAddressUseの実際の使い方は何ですか?

ドキュメントは言う:

つ以上のソケットが特定のポートにバインドするBind(EndPoint)メソッドを使用しようとする場合には、より具体的なIPアドレスを持つ1は、ネットワークトラフィックを処理しますそのポートに送信されます。任意のより具体的な別のものより1 IPEndPoint(私は見つけることができるEndPointの唯一の具象サブクラス)でどのように正確に

?どのように、なぜアプリケーションでこの動作を使用しますか? XPよりも後のWindowsバージョンでこの動作がデフォルトになるのはなぜですか?例えば

答えて

3

お持ちの場合:

var endPoint = new IPEndPoint(IPAddress.IPv6Any, 800); 
using (var socket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp)) 
{ 
    socket.Bind(endPoint); 
    socket.Listen(int.MaxValue); 
    socket.AcceptAsync(new SocketAsyncEventArgs().Completed += ...); 
} 

を使用すると、同じポート上の正確なIPを持つ別のソケットを作成した場合、あなたが今、ポート800上のすべてのIPv6アドレスからのすべての着信接続を待機し始めますが、新しいソケットが優先され、ポート800でその正確なIPの受信を開始します。これは、シナリオのより小さいセット(セキュアなチャネルを使用して正確なIPを読み書きする一時的な接続)に役立ちます。

関連する問題