From 5ca4540f1d5c82f31d28ae70c59137ac2c5e610b Mon Sep 17 00:00:00 2001 From: sirMackk Date: Tue, 3 Mar 2015 21:46:55 -0500 Subject: [PATCH] Fixes #54 - handles udp socket timeout error --- src/util/UpnpPunch.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/util/UpnpPunch.py b/src/util/UpnpPunch.py index 9ed4a7ab..28d75ef1 100644 --- a/src/util/UpnpPunch.py +++ b/src/util/UpnpPunch.py @@ -35,13 +35,11 @@ def _m_search_ssdp(): sock.sendto(ssdp_request, ('239.255.255.250', 1900)) sock.settimeout(5) - try: - data = sock.recv(2048) - except SocketError: - # socket has stopped reading on windows - pass - - return data + try: + return sock.recv(2048) + except socket.error: + # no reply from IGD, possibly no IGD on LAN + return False def _retrieve_location_from_ssdp(response): @@ -98,8 +96,8 @@ def _get_local_ip(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # not using because gevents getaddrinfo doesn't like that - # using port 1 as per hobbldygoop's comment about port 0 not working on osx: - # https://github.com/sirMackk/ZeroNet/commit/fdcd15cf8df0008a2070647d4d28ffedb503fba2#commitcomment-9863928 + # using port 1 as per hobbldygoop's comment about port 0 not working on osx: + # https://github.com/sirMackk/ZeroNet/commit/fdcd15cf8df0008a2070647d4d28ffedb503fba2#commitcomment-9863928 s.connect(('239.255.255.250', 1)) return s.getsockname()[0] @@ -173,7 +171,12 @@ def open_port(port=15441, desc="UpnpPunch"): 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: return False