ソースを参照

UdpClient.Receive parameter refers to remote EP (#3842)

Instead of listening to a local end point, listen to any remote endpoint answering to our request.
JensEhrhardt-eOPUS 9 年 前
コミット
e1afc84bb1
1 ファイル変更12 行追加14 行削除
  1. 12 14
      mcs/class/System.Data/System.Data.SqlClient/SqlConnection.cs

+ 12 - 14
mcs/class/System.Data/System.Data.SqlClient/SqlConnection.cs

@@ -931,13 +931,21 @@ namespace System.Data.SqlClient
 				if (Client.Available <= 0)
 					return -1; // Error
 
-				IPEndPoint endpoint = CreateLocalEndpoint ();
-				if (endpoint == null)
-					return -1;
+				IPEndPoint remoteEndpoint;
+				switch (Client.AddressFamily) {
+					case AddressFamily.InterNetwork:
+						remoteEndpoint = new IPEndPoint(IPAddress.Any, 0);
+						break;
+					case AddressFamily.InterNetworkV6:
+						remoteEndpoint = new IPEndPoint(IPAddress.IPv6Any, 0);
+						break;
+					default:
+						return -1; // Error
+				}
 
 				Byte [] rawrs;
 
-				rawrs = Receive (ref endpoint);
+				rawrs = Receive (ref remoteEndpoint);
 
 				string rs = Encoding.ASCII.GetString (rawrs);
 
@@ -959,16 +967,6 @@ namespace System.Data.SqlClient
 
 				return SqlServerTcpPort;
 			}
-
-			IPEndPoint CreateLocalEndpoint ()
-			{
-				foreach (var addr in Dns.GetHostEntry ("localhost").AddressList) {
-					if (addr.AddressFamily == Client.AddressFamily)
-						return new IPEndPoint (addr, 0);
-				}
-
-				return null;
-			}
 		}
 
 		struct ColumnInfo