回答編集履歴
1
サンプルコードを追記
    
        answer	
    CHANGED
    
    | 
         @@ -1,3 +1,18 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            IAsyncResult.isCompleted は単に非同期処理(TcpClient.Connect() )が完了したかどうかを示しているだけで、Tcp接続の成否は示していないのではないでしょうか。
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            つまり、Tcp接続が成功/失敗したかどうかにかかわらず、単に非同期の接続処理が終わった時点で true に変化するだけ。接続されたか失敗したかは、TcpClient.Connected を調べる必要がある、ということだと思います。
         
     | 
| 
      
 3 
     | 
    
         
            +
            つまり、Tcp接続が成功/失敗したかどうかにかかわらず、単に非同期の接続処理が終わった時点で true に変化するだけ。接続されたか失敗したかは、TcpClient.Connected を調べる必要がある、ということだと思います。
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ###TcpClientの接続タイムアウトを制御するサンプル
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            ```C#
         
     | 
| 
      
 8 
     | 
    
         
            +
            var client = new TcpClient();
         
     | 
| 
      
 9 
     | 
    
         
            +
            var result = client.BeginConnect(server_host, server_port, null, null);
         
     | 
| 
      
 10 
     | 
    
         
            +
            var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(10));
         
     | 
| 
      
 11 
     | 
    
         
            +
            if (success)
         
     | 
| 
      
 12 
     | 
    
         
            +
            {
         
     | 
| 
      
 13 
     | 
    
         
            +
                Console.WriteLine("connected!");
         
     | 
| 
      
 14 
     | 
    
         
            +
                client.EndConnect(result);
         
     | 
| 
      
 15 
     | 
    
         
            +
            } else {
         
     | 
| 
      
 16 
     | 
    
         
            +
                Console.WriteLine("connection timed out!");
         
     | 
| 
      
 17 
     | 
    
         
            +
            }
         
     | 
| 
      
 18 
     | 
    
         
            +
            ```
         
     |