public void Start(IPEndPoint localEndPoint, CancellationToken token) { _token = token; _socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); _socket.Bind(localEndPoint); EndPoint remote = new IPEndPoint(IPAddress.Any, 0); var args = new SocketAsyncEventArgs { RemoteEndPoint = remote }; args.SetBuffer(new byte[BufferSize], 0, BufferSize); args.Completed += CompletedAsync; _socket.ReceiveMessageFromAsync(args); }
bool Utils.Wrappers.Interfaces.ISocket.ReceiveMessageFromAsync(SocketAsyncEventArgs e) { return(InternalSocket.ReceiveMessageFromAsync(e)); }
public async Task NetworkInterface_LoopbackInterfaceIndex_MatchesReceivedPackets(bool ipv6) { using (var client = new Socket(SocketType.Dgram, ProtocolType.Udp)) using (var server = new Socket(SocketType.Dgram, ProtocolType.Udp)) { server.Bind(new IPEndPoint(ipv6 ? IPAddress.IPv6Loopback : IPAddress.Loopback, 0)); var serverEndPoint = (IPEndPoint)server.LocalEndPoint; Task<SocketReceiveMessageFromResult> receivedTask = server.ReceiveMessageFromAsync(new ArraySegment<byte>(new byte[1]), SocketFlags.None, serverEndPoint); while (!receivedTask.IsCompleted) { client.SendTo(new byte[] { 42 }, serverEndPoint); await Task.Delay(1); } Assert.Equal( (await receivedTask).PacketInformation.Interface, ipv6 ? NetworkInterface.IPv6LoopbackInterfaceIndex : NetworkInterface.LoopbackInterfaceIndex); } }