ProtocolType.IPv4
との違いは理解できますが、方程式のProtocolType.IPv6
どこProtocolType.IP
に入るのかわかりません。ドキュメントには、異なる値の意味が実際には説明されていません。
IP
毎回使用して、結果のソケットがIPv4アドレスとIPv6アドレスの両方で機能すると想定しても大丈夫ですか?
ProtocolType.IP は、ProtocolType.Unspecified, 0 と同じ基になる値を持っています。列挙値は、 WSASocket() winapi 関数に渡されるプロトコル引数の引数値と一致します。0 の意味を文書化したもの:
値 0 が指定されている場合、呼び出し元はプロトコルを指定したくないため、サービス プロバイダーが使用するプロトコルを選択します。
Windows ではどちらが実際に IP になりますが、マシンの構成に応じて IPv4 または IPv6 になる可能性があります。問題が発生したときに推測する必要がないように、通常はそれについて明確にしたいと思います。
私はあなたがこれを探していると思います:
Socket socket
= new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);
socket.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, 0);
これにより、TCPを使用してIPv4とIPv6の両方を処理できるソケットが作成されます。
プロジェクトの機能を思い出すと、正しい軌道に乗っています。たとえば、IPアドレスに汎用プロトコルを使用すると、IPv4またはIPv6アドレスが返されますが、これは問題ありません。しかし、私たちのドメインではIPv6デバイスが有効になっていますが、実際にはIPv4のみを使用しているため、PCはIPv6の16進数でIPアドレスを返す可能性がありますが、それだけでは実際に使用または通信することはできません(少なくとも私の知る限り) IPv4強制に戻りました。これで、10 スペースと IPv6 16 進アドレスの代わりに、10.xx.xxx.xxx だけが取得されます。