Fixes #54 - handles udp socket timeout error

This commit is contained in:
sirMackk 2015-03-03 21:46:55 -05:00
parent bd7e76628b
commit 5ca4540f1d

View file

@ -35,13 +35,11 @@ def _m_search_ssdp():
sock.sendto(ssdp_request, ('239.255.255.250', 1900)) sock.sendto(ssdp_request, ('239.255.255.250', 1900))
sock.settimeout(5) sock.settimeout(5)
try: try:
data = sock.recv(2048) return sock.recv(2048)
except SocketError: except socket.error:
# socket has stopped reading on windows # no reply from IGD, possibly no IGD on LAN
pass return False
return data
def _retrieve_location_from_ssdp(response): def _retrieve_location_from_ssdp(response):
@ -98,8 +96,8 @@ def _get_local_ip():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# not using <broadcast> because gevents getaddrinfo doesn't like that # not using <broadcast> because gevents getaddrinfo doesn't like that
# using port 1 as per hobbldygoop's comment about port 0 not working on osx: # using port 1 as per hobbldygoop's comment about port 0 not working on osx:
# https://github.com/sirMackk/ZeroNet/commit/fdcd15cf8df0008a2070647d4d28ffedb503fba2#commitcomment-9863928 # https://github.com/sirMackk/ZeroNet/commit/fdcd15cf8df0008a2070647d4d28ffedb503fba2#commitcomment-9863928
s.connect(('239.255.255.250', 1)) s.connect(('239.255.255.250', 1))
return s.getsockname()[0] return s.getsockname()[0]
@ -173,7 +171,12 @@ def open_port(port=15441, desc="UpnpPunch"):
Attempt to forward a port using UPnP. Attempt to forward a port using UPnP.
""" """
location = _retrieve_location_from_ssdp(_m_search_ssdp()) idg_response = _m_search_ssdp()
if not idg_response:
return False
location = _retrieve_location_from_ssdp(idg_response)
if not location: if not location:
return False return False