SocketAsyncResult ares;
if (!GetCheckedIPs (e, out addresses)) {
- e.socket_async_result.EndPoint = e.RemoteEndPoint;
+ //NOTE: DualMode may cause Socket's RemoteEndpoint to differ in AddressFamily from the
+ // SocketAsyncEventArgs, but the SocketAsyncEventArgs itself is not changed
ares = (SocketAsyncResult) BeginConnect (e.RemoteEndPoint, ConnectAsyncCallback, e);
} else {
- DnsEndPoint dep = (e.RemoteEndPoint as DnsEndPoint);
- e.socket_async_result.Addresses = addresses;
- e.socket_async_result.Port = dep.Port;
+ DnsEndPoint dep = (DnsEndPoint)e.RemoteEndPoint;
ares = (SocketAsyncResult) BeginConnect (addresses, dep.Port, ConnectAsyncCallback, e);
}
sockares.Complete (new SocketException ((int) SocketError.AddressNotAvailable), true);
return sockares;
}
-
- remoteEP = RemapIPEndPoint (ep);
+
+ sockares.EndPoint = remoteEP = RemapIPEndPoint (ep);
}
int error = 0;
client.DualMode = true;
var ar1 = client.BeginConnect (ep, BCCallback, client);
Assert.IsTrue (BCCalledBack.WaitOne (10000), "#1");
+ Assert.AreEqual(server.AddressFamily, client.RemoteEndPoint.AddressFamily, "#2");
+ Assert.AreEqual(server.AddressFamily, client.LocalEndPoint.AddressFamily, "#3");
client.Disconnect (false);
client.Close ();
client = new Socket (AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);
client.DualMode = true;
var ar2 = client.BeginConnect (IPAddress.Loopback, ep.Port, BCCallback, client);
- Assert.IsTrue (BCCalledBack.WaitOne (10000), "#2");
+ Assert.IsTrue (BCCalledBack.WaitOne (10000), "#4");
+ Assert.AreEqual(server.AddressFamily, client.RemoteEndPoint.AddressFamily, "#5");
+ Assert.AreEqual(server.AddressFamily, client.LocalEndPoint.AddressFamily, "#6");
client.Disconnect (false);
client.Close ();
client = new Socket (AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);
client.DualMode = true;
var ar3 = client.BeginConnect (new [] {IPAddress.Loopback}, ep.Port, BCCallback, client);
- Assert.IsTrue (BCCalledBack.WaitOne (10000), "#2");
+ Assert.IsTrue (BCCalledBack.WaitOne (10000), "#7");
+ Assert.AreEqual(server.AddressFamily, client.RemoteEndPoint.AddressFamily, "#8");
+ Assert.AreEqual(server.AddressFamily, client.LocalEndPoint.AddressFamily, "#9");
client.Disconnect (false);
client.Close();
}