- PR -

接続先が無い場合のタイムアウト設定について

投稿者投稿内容
シロ
常連さん
会議室デビュー日: 2005/05/15
投稿数: 34
投稿日時: 2007-06-26 15:05
こんにちは。
壁にぶつかってしまったので、相談させてください。

TCP/IPでの接続を行います。(OSはXPです)
この時に、接続先がいない場合、探しに行くため時間がかかってしまいます。
この時間を短くする方法はないでしょうか?
また、レジストリ等で設定を変更して対応することなどできるのでしょうか?
#ping等で先に確認するなどではなく、直接的に対応したいのです。

コネクト完了後のタイムアウトについての記述は多々見つけることができましたが、
コネクト前のタイムアウトについての記述を見つけることができませんでした。

よろしくお願いします。

ちなみに、VB.net2003を使っています。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2007-06-26 15:50
私はVBのことなんか、ぜんぜん知らないんですけど。
引用:

コネクト完了後のタイムアウトについての記述は多々見つけることができましたが、
コネクト前のタイムアウトについての記述を見つけることができませんでした。


「取得したコネクトにタイムアウトの設定をする」のと同じ事を考えているのであれば、
不可能でしょう。そもそもコネクトが存在していないんだから。

スレッドをひとつ作って所定の時間寝かせておいて、
コネクトが取得できる前に起きてきたら、タイムアウト時の処理をする
ってのはどうですか。
シロ
常連さん
会議室デビュー日: 2005/05/15
投稿数: 34
投稿日時: 2007-06-26 16:00
回答ありがとうございます。
タイマー用スレッドを使わずに、本来ある設定でできないかと考えています。

SYNを発行してから、ICMPから返事(TTL exceeded)が返ってきます。
そうすると、再度SYNを発行します。
この流れの中の、SYNの発行回数と再度SYNを発行するまでの時間を
設定できれば、やりたいことになると考えています。

コネクトという表現が少しおかしかったですね。。。
クライフ
会議室デビュー日: 2003/01/22
投稿数: 9
投稿日時: 2007-06-26 16:14
これが参考になりませんか?
http://support.microsoft.com/kb/933805/ja
シロ
常連さん
会議室デビュー日: 2005/05/15
投稿数: 34
投稿日時: 2007-06-26 16:37
クライフさま
ありがとうございます。
参考になりました。

本当は、受信待ちタイムアウトや接続タイムアウトのように
時間を設定する方法で接続失敗を取得したかったのです。
が、色々調べていて、時間指定は出来ないようだなぁと思い、
SYNの回数と時間を設定する方法へシフトチェンジしたのです。
TAD
ベテラン
会議室デビュー日: 2007/03/20
投稿数: 52
お住まい・勤務地: 海のそば
投稿日時: 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
あたりにはいろいろ書いてありますが。)
シロ
常連さん
会議室デビュー日: 2005/05/15
投稿数: 34
投稿日時: 2007-06-26 17:13
TAD様
ご意見ありがとうございます。
私個人としても、共通設定を変えるのはどうかと思っているのですが、
これがお客様のご意向なので仕方がないのです。。。
対象マシンは1つのアプリケーションしか使わないそうなので。

#提案の際には危険であることを説明して、代替案に持っていこうと思ってますが。
TAD
ベテラン
会議室デビュー日: 2007/03/20
投稿数: 52
お住まい・勤務地: 海のそば
投稿日時: 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は使うな、というのが顧客の意向なら仕方がないですね。

スキルアップ/キャリアアップ(JOB@IT)