0
IPv4とIPv6の両方を使用してUDPブロードキャスト/マルチキャストを送信できるようにする機能をいくつか書いています。次のコードはこれを行います。私が持っている問題は、それが単一のアダプタのためだけにこれを行うということです。私のPCに2つのネットワークアダプタを装備していれば、両方でブロードキャストを送信しません。 IPv4とIPv6の両方を処理し、すべてのNICで送受信できるように単一のソケットを構成することは可能ですか?あるいは、IPアドレスごとに別々のソケットを作成する必要がありますか?すべてのNICでIPv4とIPv6を使用してUDPメッセージをブロードキャストします
public void CreateBroadcaster(CancellationToken cancellationToken, int discoveryPort, int advancePort)
{
_cancellationToken = cancellationToken;
_broadcastEndpoint = new IPEndPoint(IPAddress.Broadcast, advancePort);
var epLocal = new IPEndPoint(IPAddress.IPv6Any, discoveryPort);
_broadcaster = new UdpClient(epLocal);
var soc = new Socket(AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
soc.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, false);
_broadcaster.Client = soc;
_broadcaster.Client.DualMode = true;
_broadcaster.Client.Bind(epLocal);
_broadcaster.EnableBroadcast = true;
_broadcaster.MulticastLoopback = true;
_broadcaster.Client.SetSocketOption(
SocketOptionLevel.IPv6,
SocketOptionName.AddMembership,
new IPv6MulticastOption(IPAddress.Parse("ff02::1")));
}
public void SendPingsOnAdapterLocalSubnets()
{
_broadcaster.Send(_sendData, _sendData.Length, _broadcastEndpoint);
}
2つの別個のソケットが必要です。低レベルでは、sockaddr構造体には1つまたは他のものがあります。 IPv4またはIPv6。 http://www.gnu.org/software/libc/manual/html_node/Address-Formats.html#Address-Formats – ntohl