間違いだらけの備忘録

このページの内容は無保証でありこのページの内容によって直接、または間接に損害を受けられたとしても私は責任を取りません。

インターネット接続状態の取得

Cygwinからssh接続に使用しているスクリプトをインターネット接続有効な時だけ動作する様に修正

IsInternetConnected.ps1 
$Win32 = &{

$cscode = @"

[DllImport("Connect.dll")]
public static extern int IsInternetConnected();
// The return value 0 indicates that the user is connected to the Internet. 
// The return value 1 indicates that the user is not currently connected to the Internet.
// https://docs.microsoft.com/en-us/previous-versions/windows/desktop/get_connected/isinternetconnected

"@

    return (add-type -memberDefinition $cscode -name "Win32ApiFunctions" -passthru)
}
$Connected = $Win32::IsInternetConnected()
Write-Output $Connected
exit $Connected
$ cat ssh.sh 
# !/bin/bash

while (/bin/true) do 
    result=0
    output=$(powershell -F "C:\IsInternetConnected.ps1" 2>&1 > /dev/null) || result=$?
    if [ ! "$result" = "0" ]; then 
        sleep 3
        continue
    fi
    ssh hogehoge -hoge
    sleep 3
done;

autossh?ネット接続されていないのにリトライするのはCPU時間とバッテリの無駄かなと。

インターネット接続されているのに、InternetGetConnectedStateがFALSEとなる。
https://social.msdn.microsoft.com/Forums/ja-JP/4b3a965b-d829-458e-9d24-b865afaafdb7/internetgetconnectedstatefalse?forum=vcgeneralja

InternetGetConnectedState()は

 1.利用可能なインターネット接続が存在するか、つまり
  接続する「準備」ができているかどうか。

を戻すのであって、

 2.実際繋がっていることを保障するものではありません。

なぜなら、本質的には

 3.通信は有効なデータが戻ってくるまで繋がっているかどうかの判定は不可能。

だからです。

とはいえ微妙な動作することも多々ある(再起動すると直ったりする)

このページにはhatena以外のサービスからのコンテンツが埋め込まれています。 hatenaによりGoogle AdSense 広告が埋め込まれています。