- - PR -
接続先が無い場合のタイムアウト設定について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-06-26 15:05
こんにちは。
壁にぶつかってしまったので、相談させてください。 TCP/IPでの接続を行います。(OSはXPです) この時に、接続先がいない場合、探しに行くため時間がかかってしまいます。 この時間を短くする方法はないでしょうか? また、レジストリ等で設定を変更して対応することなどできるのでしょうか? #ping等で先に確認するなどではなく、直接的に対応したいのです。 コネクト完了後のタイムアウトについての記述は多々見つけることができましたが、 コネクト前のタイムアウトについての記述を見つけることができませんでした。 よろしくお願いします。 ちなみに、VB.net2003を使っています。 | ||||
|
投稿日時: 2007-06-26 15:50
私はVBのことなんか、ぜんぜん知らないんですけど。
「取得したコネクトにタイムアウトの設定をする」のと同じ事を考えているのであれば、 不可能でしょう。そもそもコネクトが存在していないんだから。 スレッドをひとつ作って所定の時間寝かせておいて、 コネクトが取得できる前に起きてきたら、タイムアウト時の処理をする ってのはどうですか。 | ||||
|
投稿日時: 2007-06-26 16:00
回答ありがとうございます。
タイマー用スレッドを使わずに、本来ある設定でできないかと考えています。 SYNを発行してから、ICMPから返事(TTL exceeded)が返ってきます。 そうすると、再度SYNを発行します。 この流れの中の、SYNの発行回数と再度SYNを発行するまでの時間を 設定できれば、やりたいことになると考えています。 コネクトという表現が少しおかしかったですね。。。 | ||||
|
投稿日時: 2007-06-26 16:14
これが参考になりませんか?
http://support.microsoft.com/kb/933805/ja | ||||
|
投稿日時: 2007-06-26 16:37
クライフさま
ありがとうございます。 参考になりました。 本当は、受信待ちタイムアウトや接続タイムアウトのように 時間を設定する方法で接続失敗を取得したかったのです。 が、色々調べていて、時間指定は出来ないようだなぁと思い、 SYNの回数と時間を設定する方法へシフトチェンジしたのです。 | ||||
|
投稿日時: 2007-06-26 16:50
デスクトップの振舞いとかのローカルマシン限定のことならともかく、ネットワーク
(外部とのI/F)について、一つのアプリケーションの都合でOS全体の共通設定を 変えてしまうのが「本来ある設定」の使い方なのかどうかかなり疑問です。 私もVBやら.NETは知りませんが(しかも最近socketプログラミングから離れていて うろ覚えですが)、connectをノンブロックに設定してselectでタイムアウトを 設定して必要に応じてエラー処理、とかやるのが穏当じゃないでしょうか。 (http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/lame-list.html あたりにはいろいろ書いてありますが。) | ||||
|
投稿日時: 2007-06-26 17:13
TAD様
ご意見ありがとうございます。 私個人としても、共通設定を変えるのはどうかと思っているのですが、 これがお客様のご意向なので仕方がないのです。。。 対象マシンは1つのアプリケーションしか使わないそうなので。 #提案の際には危険であることを説明して、代替案に持っていこうと思ってますが。 | ||||
|
投稿日時: 2007-06-26 18:23
C/C++だったら例えば
http://www.ne.jp/asahi/hishidama/home/tech/lang/socket.html のTCPクライアント接続の項を参考にすればいいんでしょうけど。VBだとWinsockを直呼ぶのが結構面倒? perl系の話題みたいですがWindowsAPIのレベルで http://www.mew.org/pipermail/mew-dist/1999-November/011341.html にも参考になる情報がある気がしますがこちらは自分では消化していないのでなんとも。 スレッドは使うな、とか低レベル?APIは使うな、というのが顧客の意向なら仕方がないですね。 |