WNetAddConnection/ネットワーク生存確認

解決


こうた  2011-06-01 21:01:10  No: 40591

下記の通り記載して戻り値から参照先の生存確認を行いたいのですが
正常時は特に問題ないものの、相手が無い場合、試験したPCのLANケーブルをDelphi 7です。
抜いてテストした場合かなりの時間フリーズしていまいます。
特にケーブルを抜いた場合はしばらく待った後に0(正常?)が返ってきて困ります。

  ret := WNetAddConnection('\\192.168.0.36\data', '', '');

スレッド等にして行うしかないのでしょうか?
WNetAddConnection関数は2と3があるようですがこれらも同じなのでしょうか?


au  2011-06-01 23:05:51  No: 40592

WNet系nAPIはタイムアウトの指定とか無理みたいなんで。
Indyかなんか使ってping送って生存確認するとかしかないかもですね。

ただ、Windowsファイアウォールのデフォルト設定がpingを無視するだったような気もするのでその辺りの設定がいじれないなら厳しいですね


こうた  2011-06-02 00:13:50  No: 40593

タイムアウトの件、スレッド等で対処したいと思います。
ただケーブルを抜いてもう生きてないPCを参照しても0になるというのは対処の方法はないのでしょうか?なにかキャッシュのような機能でもあるのでしょうか?


名前なし  2011-06-02 08:17:47  No: 40594

http://support.microsoft.com/kb/412789/ja
これだとかなり早く検知できます。ループにもよりますが
LAN抜けのポップアップと同じくらいの早さで取得できると思います。

ノンブロッキングにして検査すれば、それなりの速度は出るかも知れません。


名前なし  2011-06-02 08:21:13  No: 40595

ごめんなさい。
WNetAddConnection
見てませんでした。直前で判定するのはありかと思います。


こうた  2011-06-02 17:59:51  No: 40596

ありがとうございます。
教えていただいた方法で試してみます。

これでだめならまた別の方法を調べてみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加