Alex said:
Alexnb said:
I am wondering, is there a simple way to test for Internet connection?
If
not, what is the hard way
Trying to fetch the homepage from a few major websites (Yahoo, Google,
etc.)? If all of them are failing, it's very likely that the connection
is down. You can use urllib2 [1] to accomplish that.
[1] <
http://docs.python.org/lib/module-urllib2.html>
This seems to work and is rather fast and wastes no bandwidth:
==============================================================================
#!/usr/bin/python
import socket, struct
def check_host(host, port, timeout=1):
"""
Check for connectivity to a certain host.
"""
# assume we have no route.
ret=False
# connect to host.
try:
# create socket.
sock=socket.socket()
# create timeval structure.
timeval=struct.pack("2I", timeout, 0)
# set socket timeout options.
sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, timeval)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDTIMEO, timeval)
# connect to host.
sock.connect((host, port))
# abort communications.
sock.shutdown(SHUT_RDWR)
# we have connectivity after all.
ret=True
except:
pass
# try to close socket in any case.
try:
sock.close()
except:
pass
return ret
# -------------------------------- main ---------------------------------
if check_host("
www.heise.de", 80):
print "Horray!"
else:
print "We've lost headquarters!"
==============================================================================
I hope the code is ok, but there is always something you can do better.
Comments?
Cheers,
Thomas.