private static void ConnectAsyncInternal( EndPoint remoteEndPoint, ConnectedCallback callback, object state) { if (remoteEndPoint is DnsEndPoint) { DnsEndPoint dnsEndPoint = (DnsEndPoint)remoteEndPoint; IAsyncResult hostAddresses = Dns.BeginGetHostAddresses(dnsEndPoint.Host, new AsyncCallback(ConnectAsyncExtension.OnGetHostAddresses), (object)new ConnectAsyncExtension.DnsConnectState() { Port = dnsEndPoint.Port, Callback = callback, State = state }); if (!hostAddresses.CompletedSynchronously) { return; } ConnectAsyncExtension.OnGetHostAddresses(hostAddresses); } else { SocketAsyncEventArgs socketAsyncEventArgs = ConnectAsyncExtension.CreateSocketAsyncEventArgs(remoteEndPoint, callback, state); new global::System.Net.Sockets.Socket(remoteEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp) .ConnectAsync(socketAsyncEventArgs); } }