示例#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);
         }
     }
 }