Front page | perl.beginners |
Postings from January 2002
RE: Computer connected to the internet?
Thread Previous
|
Thread Next
From:
Peter Scott
Date:
January 24, 2002 14:00
Subject:
RE: Computer connected to the internet?
Message ID:
4.3.2.7.2.20020124122713.00aacc80@mail.webquarry.com
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
Thread Previous
|
Thread Next