teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

サンプルコードを追記

2016/05/27 00:43

投稿

tkanda
tkanda

スコア2425

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
+ ```