示例#1
0
 private static void SocketConnectCompleted(object sender, SocketAsyncEventArgs e)
 {
     ConnectAsyncExtension.DnsConnectState userToken = e.UserToken as ConnectAsyncExtension.DnsConnectState;
     if (e.SocketError == SocketError.Success)
     {
         ConnectAsyncExtension.ClearSocketAsyncEventArgs(e);
         userToken.Callback((global::System.Net.Sockets.Socket)sender, userToken.State, e);
     }
     else if (e.SocketError != SocketError.HostUnreachable && e.SocketError != SocketError.ConnectionRefused)
     {
         ConnectAsyncExtension.ClearSocketAsyncEventArgs(e);
         userToken.Callback((global::System.Net.Sockets.Socket)null, userToken.State, e);
     }
     else
     {
         global::System.Net.Sockets.Socket attempSocket;
         IPAddress nextAddress = ConnectAsyncExtension.GetNextAddress(userToken, out attempSocket);
         if (nextAddress == null)
         {
             ConnectAsyncExtension.ClearSocketAsyncEventArgs(e);
             e.SocketError = SocketError.HostUnreachable;
             userToken.Callback((global::System.Net.Sockets.Socket)null, userToken.State, e);
         }
         else
         {
             e.RemoteEndPoint = (EndPoint) new IPEndPoint(nextAddress, userToken.Port);
             if (attempSocket.ConnectAsync(e))
             {
                 return;
             }
             ConnectAsyncExtension.SocketConnectCompleted((object)attempSocket, e);
         }
     }
 }
示例#2
0
        private static void OnGetHostAddresses(IAsyncResult result)
        {
            ConnectAsyncExtension.DnsConnectState asyncState = result.AsyncState as ConnectAsyncExtension.DnsConnectState;
            IPAddress[] hostAddresses;
            try {
                hostAddresses = Dns.EndGetHostAddresses(result);
            } catch {
                asyncState.Callback((global::System.Net.Sockets.Socket)null, asyncState.State, (SocketAsyncEventArgs)null);
                return;
            }

            if (hostAddresses == null || hostAddresses.Length <= 0)
            {
                asyncState.Callback((global::System.Net.Sockets.Socket)null, asyncState.State, (SocketAsyncEventArgs)null);
            }
            else
            {
                asyncState.Addresses = hostAddresses;
                ConnectAsyncExtension.CreateAttempSocket(asyncState);
                global::System.Net.Sockets.Socket attempSocket;
                IPAddress nextAddress = ConnectAsyncExtension.GetNextAddress(asyncState, out attempSocket);
                if (nextAddress == null)
                {
                    asyncState.Callback((global::System.Net.Sockets.Socket)null, asyncState.State, (SocketAsyncEventArgs)null);
                }
                else
                {
                    SocketAsyncEventArgs e = new SocketAsyncEventArgs();
                    e.Completed += new EventHandler <SocketAsyncEventArgs>(ConnectAsyncExtension.SocketConnectCompleted);
                    IPEndPoint ipEndPoint = new IPEndPoint(nextAddress, asyncState.Port);
                    e.RemoteEndPoint = (EndPoint)ipEndPoint;
                    e.UserToken      = (object)asyncState;
                    if (attempSocket.ConnectAsync(e))
                    {
                        return;
                    }
                    ConnectAsyncExtension.SocketConnectCompleted((object)attempSocket, e);
                }
            }
        }