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

解決


こうた  2011-06-01 12:01:10  No: 40591  IP: 192.*.*.*

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

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

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

編集 削除
au  2011-06-01 14:05:51  No: 40592  IP: 192.*.*.*

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

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

編集 削除
こうた  2011-06-01 15:13:50  No: 40593  IP: 192.*.*.*

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

編集 削除
名前なし  2011-06-01 23:17:47  No: 40594  IP: 192.*.*.*

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

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

編集 削除
名前なし  2011-06-01 23:21:13  No: 40595  IP: 192.*.*.*

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

編集 削除
こうた  2011-06-02 08:59:51  No: 40596  IP: 192.*.*.*

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

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

編集 削除