At 03:40 AM 1/24/02 -0800, Gary Hawkins wrote: > > >How can I check whether the system is connected? > > > > > >Want to pause the script if connection is lost. > > ><snip> > > > > Instead of trying to check whether "there is an Internet connection," just > > see whether you can do whatever it is your program is using the > Internet for. > > ><snip> > > > > Peter Scott > >I like that suggestion. So, how can I determine it based on the success of >this second line?: > >&CheckOnlineState; >$request = HTTP::Request->new(HEAD => "$URL");
You wouldn't do it there; that line doesn't use the network. You mean the next line :-) which I imagine is something like $response = $useragent->request($request); >In the meantime, I came up with the following Win32::API read of a dll >function, which works. I don't speak Win32::, so I can't comment on this; since it works, great. I'd be doing something like if ($response->message =~ /timeout/i) { ... >Supposing that the $request success test above winds up >in a catch 22 without a way to recover and retry, I would like to find some >sort of associated method (without ping) to check online state if on Linux. >Here's the one for Windows: > >if ($^O eq "MSWin32") { use Win32::API; } # top of script ># The 'if' is because, for some ungodly reason my Linux-based ># ISP doesn't have Win32::API installed, imagine that. > >sub CheckOnlineState { # elsewhere > return if $^O ne "MSWin32"; > $IsNetworkAlive = Win32::API->new( > "SENSAPI.DLL", "IsNetworkAlive", [P], "L"); > $return_code = "\0" x 4; # reserve some memory for it, why? > $IsNetworkAlive->Call( $return_code ); > # or warn Win32::FormatMessage(Win32::GetLastError()); > $return_code = unpack('L',$return_code); # hash otherwise? > #print "\nReturn code: $return_code\n"; > if ($return_code == 0) { > print "\n\n\tConnection lost! > \tRestore and then > press any key to continue...\n\n"; > `pause`; > } > # From C?: Declare Function IsNetworkAlive \ > # Lib "SENSAPI.DLL" \ > # (ByRef lpdwFlags As Long) As Long > # lpdw apparently = long pointer double word, so, [P]. > # ... IsNetworkAlive As Long, so, "L", right? >} > >That allows the script to pick up where it left off when my 2-hr-limit DSL >connection times out and I reconnect it via the any_key. > >One small problem with the routine is that I see it return 2 for my particular >connection type if connected but there is supposed to be some associated >descriptive text along with that, differentiating between LAN or WAN or >something, and I don't know which is which for 1 or 2 or how to get that text. >Oh well, zero works. Thanks to those who responded, all comments were >appreciated and helpful. > >That's the furthest I've gotten with Win32::API. Now it's tempting to go >bonkers looking up functions in dll's and exe's via notepad or QuickView and >run them from Perl to amuse myself. Or maybe it has a greater use, maybe >girls >would just about faint when they hear this pickup line: "I access Windows >API's from Perl all the time, yeah I have complete control of Windows." :b >....have to give that a try at Starbuck's first thing in the morning. Hey I'm >in Seattle and the traffic has driven us all mad so gimme a break. :/ I'm across the water in Victoria. What's "traffic"? :-) -- Peter Scott Pacific Systems Design Technologies http://www.perldebugged.com -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]