▽1
●
a-kuma3 ベストアンサー |
TcpClient クラス (System.Net.Sockets)
ReceiveTimeout 読み取り操作が開始された後に TcpClient がデータの受信を待機する時間を取得または設定します。 SendTimeout 送信操作が正常に完了するのを TcpClient が待機する時間を取得または設定します。
どちらも、connect した後に読み書きするときのタイムアウトの指定です。
connect できるかどうかのタイムアウトの指定ではないので、期待通りの動作をしません。
unix の socket は、select システムコールを使って connect のタイムアウトを設定しますが、Windows (WIN32API) の socket は WSAWaitForMultipleEvents API で待ち合わせるように作ります。
.NET といえども、Windows API のラッパーなので、イベントを待ち合わせるというふうに作るようです。
http://stackoverflow.com/questions/17118632/how-to-set-the-timeout-for-a-tcpclient
http://noterr0001.hateblo.jp/entry/20100201/1265007068
TcpClient.BeginConnect で、接続処理(+callback)を非同期で実行しておいて、別途、待ち合わせをしておいて、一定時間内に終わっていなければエラーにする、という考え方だと思います。