private void ReceiveFromAsync_Helper(IPAddress listenOn, IPAddress connectTo) { using (Socket serverSocket = new Socket(SocketType.Dgram, ProtocolType.Udp)) { int port = serverSocket.BindToAnonymousPort(listenOn); ManualResetEvent waitHandle = new ManualResetEvent(false); SocketAsyncEventArgs args = new SocketAsyncEventArgs(); args.RemoteEndPoint = new IPEndPoint(listenOn, port); args.SetBuffer(new byte[1], 0, 1); args.UserToken = waitHandle; args.Completed += AsyncCompleted; bool async = serverSocket.ReceiveFromAsync(args); SocketUdpClient client = new SocketUdpClient(_log, serverSocket, connectTo, port); if (async && !waitHandle.WaitOne(200)) { throw new TimeoutException(); } if (args.SocketError != SocketError.Success) { throw new SocketException((int)args.SocketError); } Assert.Equal(1, args.BytesTransferred); Assert.Equal <Type>(args.RemoteEndPoint.GetType(), typeof(IPEndPoint)); IPEndPoint remoteEndPoint = args.RemoteEndPoint as IPEndPoint; Assert.Equal(AddressFamily.InterNetworkV6, remoteEndPoint.AddressFamily); Assert.Equal(connectTo.MapToIPv6(), remoteEndPoint.Address); } }
private void ReceiveMessageFromAsync_Helper(IPAddress listenOn, IPAddress connectTo, bool expectedToTimeout = false) { using (Socket serverSocket = new Socket(SocketType.Dgram, ProtocolType.Udp)) { serverSocket.ReceiveTimeout = expectedToTimeout ? Configuration.FailingTestTimeout : Configuration.PassingTestTimeout; int port = serverSocket.BindToAnonymousPort(listenOn); ManualResetEvent waitHandle = new ManualResetEvent(false); SocketAsyncEventArgs args = new SocketAsyncEventArgs(); args.RemoteEndPoint = new IPEndPoint(connectTo, port); args.SetBuffer(new byte[1], 0, 1); args.Completed += AsyncCompleted; args.UserToken = waitHandle; bool async = serverSocket.ReceiveMessageFromAsync(args); Assert.True(async); SocketUdpClient client = new SocketUdpClient(_log, serverSocket, connectTo, port); if (!waitHandle.WaitOne(serverSocket.ReceiveTimeout)) { throw new TimeoutException(); } Assert.Equal(1, args.BytesTransferred); Assert.Equal<Type>(args.RemoteEndPoint.GetType(), typeof(IPEndPoint)); IPEndPoint remoteEndPoint = args.RemoteEndPoint as IPEndPoint; Assert.Equal(AddressFamily.InterNetworkV6, remoteEndPoint.AddressFamily); Assert.Equal(connectTo.MapToIPv6(), remoteEndPoint.Address); Assert.Equal(SocketFlags.None, args.SocketFlags); Assert.NotNull(args.ReceiveMessageFromPacketInfo); Assert.Equal(connectTo, args.ReceiveMessageFromPacketInfo.Address); // TODO: Move to NetworkInformation tests. // Assert.Equal(NetworkInterface.IPv6LoopbackInterfaceIndex, args.ReceiveMessageFromPacketInfo.Interface); } }
private void BeginReceiveMessageFrom_Helper(IPAddress listenOn, IPAddress connectTo, bool expectedToTimeout = false) { using (Socket serverSocket = new Socket(SocketType.Dgram, ProtocolType.Udp)) { int port = serverSocket.BindToAnonymousPort(listenOn); EndPoint receivedFrom = new IPEndPoint(connectTo, port); SocketFlags socketFlags = SocketFlags.None; IPPacketInformation ipPacketInformation; IAsyncResult async = serverSocket.BeginReceiveMessageFrom(new byte[1], 0, 1, socketFlags, ref receivedFrom, null, null); // Behavior difference from Desktop: receivedFrom will _not_ change during the synchronous phase. // IPEndPoint remoteEndPoint = receivedFrom as IPEndPoint; // Assert.Equal(AddressFamily.InterNetworkV6, remoteEndPoint.AddressFamily); // Assert.Equal(connectTo.MapToIPv6(), remoteEndPoint.Address); SocketUdpClient client = new SocketUdpClient(_log, serverSocket, connectTo, port); bool success = async.AsyncWaitHandle.WaitOne(expectedToTimeout ? Configuration.FailingTestTimeout : Configuration.PassingTestTimeout); if (!success) { throw new TimeoutException(); } receivedFrom = new IPEndPoint(connectTo, port); int received = serverSocket.EndReceiveMessageFrom(async, ref socketFlags, ref receivedFrom, out ipPacketInformation); Assert.Equal(1, received); Assert.Equal<Type>(receivedFrom.GetType(), typeof(IPEndPoint)); IPEndPoint remoteEndPoint = receivedFrom as IPEndPoint; Assert.Equal(AddressFamily.InterNetworkV6, remoteEndPoint.AddressFamily); Assert.Equal(connectTo.MapToIPv6(), remoteEndPoint.Address); Assert.Equal(SocketFlags.None, socketFlags); Assert.NotNull(ipPacketInformation); Assert.Equal(connectTo, ipPacketInformation.Address); // TODO: Move to NetworkInformation tests. //Assert.Equal(NetworkInterface.IPv6LoopbackInterfaceIndex, ipPacketInformation.Interface); } }
private void ReceiveMessageFrom_Helper(IPAddress listenOn, IPAddress connectTo) { using (Socket serverSocket = new Socket(SocketType.Dgram, ProtocolType.Udp)) { serverSocket.ReceiveTimeout = 500; int port = serverSocket.BindToAnonymousPort(listenOn); EndPoint receivedFrom = new IPEndPoint(connectTo, port); SocketFlags socketFlags = SocketFlags.None; IPPacketInformation ipPacketInformation; int received = 0; if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { Assert.Throws<SocketException>(() => { // This is a false start. // http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.receivemessagefrom.aspx // "...the returned IPPacketInformation object will only be valid for packets which arrive at the // local computer after the socket option has been set. If a socket is sent packets between when // it is bound to a local endpoint (explicitly by the Bind method or implicitly by one of the Connect, // ConnectAsync, SendTo, or SendToAsync methods) and its first call to the ReceiveMessageFrom method, // calls to ReceiveMessageFrom method will return invalid IPPacketInformation objects for these packets." received = serverSocket.ReceiveMessageFrom(new byte[1], 0, 1, ref socketFlags, ref receivedFrom, out ipPacketInformation); }); } else { // *nix may throw either a SocketException or ArgumentException in this case, depending on how the IP stack // behaves w.r.t. dual-mode sockets bound to IPv6-specific addresses. Assert.ThrowsAny<Exception>(() => { received = serverSocket.ReceiveMessageFrom(new byte[1], 0, 1, ref socketFlags, ref receivedFrom, out ipPacketInformation); }); } SocketUdpClient client = new SocketUdpClient(_log, serverSocket, connectTo, port); receivedFrom = new IPEndPoint(connectTo, port); socketFlags = SocketFlags.None; received = serverSocket.ReceiveMessageFrom(new byte[1], 0, 1, ref socketFlags, ref receivedFrom, out ipPacketInformation); Assert.Equal(1, received); Assert.Equal<Type>(receivedFrom.GetType(), typeof(IPEndPoint)); IPEndPoint remoteEndPoint = receivedFrom as IPEndPoint; Assert.Equal(AddressFamily.InterNetworkV6, remoteEndPoint.AddressFamily); Assert.Equal(connectTo.MapToIPv6(), remoteEndPoint.Address); Assert.Equal(SocketFlags.None, socketFlags); Assert.NotNull(ipPacketInformation); Assert.Equal(connectTo, ipPacketInformation.Address); // TODO: Move to NetworkInformation tests. // Assert.Equal(NetworkInterface.IPv6LoopbackInterfaceIndex, ipPacketInformation.Interface); } }
private void ReceiveFromAsync_Helper(IPAddress listenOn, IPAddress connectTo, bool expectedToTimeout = false) { using (Socket serverSocket = new Socket(SocketType.Dgram, ProtocolType.Udp)) { int port = serverSocket.BindToAnonymousPort(listenOn); ManualResetEvent waitHandle = new ManualResetEvent(false); SocketAsyncEventArgs args = new SocketAsyncEventArgs(); args.RemoteEndPoint = new IPEndPoint(listenOn, port); args.SetBuffer(new byte[1], 0, 1); args.UserToken = waitHandle; args.Completed += AsyncCompleted; bool async = serverSocket.ReceiveFromAsync(args); SocketUdpClient client = new SocketUdpClient(_log, serverSocket, connectTo, port); if (async && !waitHandle.WaitOne(expectedToTimeout ? Configuration.FailingTestTimeout : Configuration.PassingTestTimeout)) { throw new TimeoutException(); } if (args.SocketError != SocketError.Success) { throw new SocketException((int)args.SocketError); } Assert.Equal(1, args.BytesTransferred); Assert.Equal<Type>(args.RemoteEndPoint.GetType(), typeof(IPEndPoint)); IPEndPoint remoteEndPoint = args.RemoteEndPoint as IPEndPoint; Assert.Equal(AddressFamily.InterNetworkV6, remoteEndPoint.AddressFamily); Assert.Equal(connectTo.MapToIPv6(), remoteEndPoint.Address); } }
private void ReceiveFrom_Helper(IPAddress listenOn, IPAddress connectTo) { using (Socket serverSocket = new Socket(SocketType.Dgram, ProtocolType.Udp)) { serverSocket.ReceiveTimeout = 500; int port = serverSocket.BindToAnonymousPort(listenOn); SocketUdpClient client = new SocketUdpClient(_log, serverSocket, connectTo, port); EndPoint receivedFrom = new IPEndPoint(connectTo, port); int received = serverSocket.ReceiveFrom(new byte[1], ref receivedFrom); Assert.Equal(1, received); Assert.Equal<Type>(receivedFrom.GetType(), typeof(IPEndPoint)); IPEndPoint remoteEndPoint = receivedFrom as IPEndPoint; Assert.Equal(AddressFamily.InterNetworkV6, remoteEndPoint.AddressFamily); Assert.Equal(connectTo.MapToIPv6(), remoteEndPoint.Address); } }
private void BeginReceiveFrom_Helper(IPAddress listenOn, IPAddress connectTo, bool expectedToTimeout = false) { using (Socket serverSocket = new Socket(SocketType.Dgram, ProtocolType.Udp)) { serverSocket.ReceiveTimeout = 500; int port = serverSocket.BindToAnonymousPort(listenOn); EndPoint receivedFrom = new IPEndPoint(connectTo, port); IAsyncResult async = serverSocket.BeginReceiveFrom(new byte[1], 0, 1, SocketFlags.None, ref receivedFrom, null, null); IPEndPoint remoteEndPoint = receivedFrom as IPEndPoint; Assert.Equal(AddressFamily.InterNetworkV6, remoteEndPoint.AddressFamily); Assert.Equal(connectTo.MapToIPv6(), remoteEndPoint.Address); SocketUdpClient client = new SocketUdpClient(serverSocket, connectTo, port); bool success = async.AsyncWaitHandle.WaitOne(expectedToTimeout ? Configuration.FailingTestTimeout : Configuration.PassingTestTimeout); if (!success) { throw new TimeoutException(); } receivedFrom = new IPEndPoint(connectTo, port); int received = serverSocket.EndReceiveFrom(async, ref receivedFrom); Assert.Equal(1, received); Assert.Equal<Type>(receivedFrom.GetType(), typeof(IPEndPoint)); remoteEndPoint = receivedFrom as IPEndPoint; Assert.Equal(AddressFamily.InterNetworkV6, remoteEndPoint.AddressFamily); Assert.Equal(connectTo.MapToIPv6(), remoteEndPoint.Address); } }
private void BeginReceiveMessageFrom_Helper(IPAddress listenOn, IPAddress connectTo) { using (Socket serverSocket = new Socket(SocketType.Dgram, ProtocolType.Udp)) { int port = serverSocket.BindToAnonymousPort(listenOn); EndPoint receivedFrom = new IPEndPoint(connectTo, port); SocketFlags socketFlags = SocketFlags.None; IPPacketInformation ipPacketInformation; IAsyncResult async = serverSocket.BeginReceiveMessageFrom(new byte[1], 0, 1, socketFlags, ref receivedFrom, null, null); IPEndPoint remoteEndPoint = receivedFrom as IPEndPoint; Assert.Equal(AddressFamily.InterNetworkV6, remoteEndPoint.AddressFamily); Assert.Equal(connectTo.MapToIPv6(), remoteEndPoint.Address); SocketUdpClient client = new SocketUdpClient(serverSocket, connectTo, port); bool success = async.AsyncWaitHandle.WaitOne(500); if (!success) { throw new TimeoutException(); } receivedFrom = new IPEndPoint(connectTo, port); int received = serverSocket.EndReceiveMessageFrom(async, ref socketFlags, ref receivedFrom, out ipPacketInformation); Assert.Equal(1, received); Assert.Equal<Type>(receivedFrom.GetType(), typeof(IPEndPoint)); remoteEndPoint = receivedFrom as IPEndPoint; Assert.Equal(AddressFamily.InterNetworkV6, remoteEndPoint.AddressFamily); Assert.Equal(connectTo.MapToIPv6(), remoteEndPoint.Address); Assert.Equal(SocketFlags.None, socketFlags); Assert.NotNull(ipPacketInformation); Assert.Equal(connectTo, ipPacketInformation.Address); // TODO: Move to NetworkInformation tests. //Assert.Equal(NetworkInterface.IPv6LoopbackInterfaceIndex, ipPacketInformation.Interface); } }
private void BeginReceiveFrom_Helper(IPAddress listenOn, IPAddress connectTo, bool expectedToTimeout = false) { using (Socket serverSocket = new Socket(SocketType.Dgram, ProtocolType.Udp)) { serverSocket.ReceiveTimeout = 500; int port = serverSocket.BindToAnonymousPort(listenOn); EndPoint receivedFrom = new IPEndPoint(connectTo, port); IAsyncResult async = serverSocket.BeginReceiveFrom(new byte[1], 0, 1, SocketFlags.None, ref receivedFrom, null, null); // Behavior difference from Desktop: receivedFrom will _not_ change during the synchronous phase. // IPEndPoint remoteEndPoint = receivedFrom as IPEndPoint; // Assert.Equal(AddressFamily.InterNetworkV6, remoteEndPoint.AddressFamily); // Assert.Equal(connectTo.MapToIPv6(), remoteEndPoint.Address); SocketUdpClient client = new SocketUdpClient(_log, serverSocket, connectTo, port, redundant: !expectedToTimeout); bool success = async.AsyncWaitHandle.WaitOne(expectedToTimeout ? TestSettings.FailingTestTimeout : TestSettings.PassingTestTimeout); if (!success) { throw new TimeoutException(); } receivedFrom = new IPEndPoint(connectTo, port); int received = serverSocket.EndReceiveFrom(async, ref receivedFrom); Assert.Equal(1, received); Assert.Equal<Type>(receivedFrom.GetType(), typeof(IPEndPoint)); IPEndPoint remoteEndPoint = receivedFrom as IPEndPoint; Assert.Equal(AddressFamily.InterNetworkV6, remoteEndPoint.AddressFamily); Assert.Equal(connectTo.MapToIPv6(), remoteEndPoint.Address); } }