Imported Upstream version 4.8.0.309

Former-commit-id: 5f9c6ae75f295e057a7d2971f3a6df4656fa8850
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2016-11-10 13:04:39 +00:00
parent ee1447783b
commit 94b2861243
4912 changed files with 390737 additions and 49310 deletions

View File

@ -100,5 +100,50 @@ namespace System.Net.Sockets
if (!silent && error != 0)
throw new SocketException (error);
}
internal bool CanTryAddressFamily (AddressFamily family)
{
return (family == address_family) || (family == AddressFamily.InterNetwork && IsDualMode);
}
public static bool ConnectAsync(SocketType socketType, ProtocolType protocolType, SocketAsyncEventArgs e) {
bool retval;
// Throw if multiple buffers specified.
if (e.m_BufferList != null) {
throw new ArgumentException(SR.GetString(SR.net_multibuffernotsupported), "BufferList");
}
// Throw if RemoteEndPoint is null.
if (e.RemoteEndPoint == null) {
throw new ArgumentNullException("remoteEP");
}
EndPoint endPointSnapshot = e.RemoteEndPoint;
DnsEndPoint dnsEP = endPointSnapshot as DnsEndPoint;
if (dnsEP != null) {
Socket attemptSocket = null;
MultipleConnectAsync multipleConnectAsync = null;
if (dnsEP.AddressFamily == AddressFamily.Unspecified) {
multipleConnectAsync = new MultipleSocketMultipleConnectAsync(socketType, protocolType);
} else {
attemptSocket = new Socket(dnsEP.AddressFamily, socketType, protocolType);
multipleConnectAsync = new SingleSocketMultipleConnectAsync(attemptSocket, false);
}
e.StartOperationCommon(attemptSocket);
e.StartOperationWrapperConnect(multipleConnectAsync);
retval = multipleConnectAsync.StartConnectAsync(e, dnsEP);
} else {
Socket attemptSocket = new Socket(endPointSnapshot.AddressFamily, socketType, protocolType);
retval = attemptSocket.ConnectAsync(e);
}
return retval;
}
}
}