Merge pull request #2274 from esdrubal/udpclientreceive
authorMarcos Henrich <marcoshenrich@gmail.com>
Wed, 13 Jan 2016 10:17:38 +0000 (10:17 +0000)
committerMarcos Henrich <marcoshenrich@gmail.com>
Wed, 13 Jan 2016 10:17:38 +0000 (10:17 +0000)
Fixes UdpClient.Receive with IPv6 endpoint

mcs/class/System/System.Net.Sockets/UdpClient.cs
mcs/class/System/Test/System.Net.Sockets/UdpClientTest.cs

index fc2a2ef16c16c9d5075f506fdf94f995914c07c4..0799816a9ea82ce2c0d22b625cf267d8eeaa1179 100644 (file)
@@ -298,7 +298,7 @@ namespace System.Net.Sockets
                        CheckDisposed ();
 
                        byte [] recBuffer = new byte [65536]; // Max. size
-                       EndPoint endPoint = new IPEndPoint (IPAddress.Any, 0);
+                       EndPoint endPoint = (EndPoint) remoteEP;
                        int dataRead = socket.ReceiveFrom (recBuffer, ref endPoint);
                        if (dataRead < recBuffer.Length)
                                recBuffer = CutArray (recBuffer, dataRead);
index 334f552b515a94da5491f6c3a74280c83a34771c..f1916f261513f3fd9cc98a0f443da94fa48466b8 100644 (file)
@@ -1064,6 +1064,23 @@ namespace MonoTests.System.Net.Sockets {
 
                        client.Close ();
                }
+
+               [Test] // #6057
+               public void ReceiveIPv6 ()
+               {
+                       int PORT = 9997;
+                       using(var udpClient = new UdpClient (PORT, AddressFamily.InterNetworkV6))
+                       using(var udpClient2 = new UdpClient (PORT+1, AddressFamily.InterNetworkV6))
+                       {
+                               var dataSent = new byte [] {1,2,3};
+                               udpClient2.SendAsync (dataSent, dataSent.Length, "::1", PORT);
+
+                               IPEndPoint endPoint = new IPEndPoint (IPAddress.IPv6Any, 0);
+                               var data = udpClient.Receive (ref endPoint);
+
+                               Assert.AreEqual (dataSent.Length, data.Length);
+                       }
+               }
                
                /* No test for Ttl default as it is platform dependent */