Bläddra i källkod

Also add a timeout for the actual NAT-PMP port mapping step.

Adam Ierymenko 9 år sedan
förälder
incheckning
3d66492828
1 ändrade filer med 3 tillägg och 0 borttagningar
  1. 3 0
      osdep/PortMapper.cpp

+ 3 - 0
osdep/PortMapper.cpp

@@ -124,6 +124,7 @@ public:
 					}
 
 				  sendnewportmappingrequest(&natpmp,NATPMP_PROTOCOL_UDP,localPort,tryPort,(ZT_PORTMAPPER_REFRESH_DELAY * 2) / 1000);
+					myTimeout = OSUtils::now() + 10000;
 					do {
 				    fd_set fds;
 				    struct timeval timeout;
@@ -132,6 +133,8 @@ public:
 				    getnatpmprequesttimeout(&natpmp, &timeout);
 				    select(FD_SETSIZE, &fds, NULL, NULL, &timeout);
 				    r = readnatpmpresponseorretry(&natpmp, &response);
+						if (OSUtils::now() >= myTimeout)
+							break;
 				  } while (r == NATPMP_TRYAGAIN);
 					if (r == 0) {
 						publicAddress.setPort(response.pnu.newportmapping.mappedpublicport);