diff --git a/src/upnp/protocol/natpmp/nat_pmp.cpp b/src/upnp/protocol/natpmp/nat_pmp.cpp index 7e88ad74ecd6f4ac3f7fab78c35a411e16e9e73b..c822b378aa925190c30950b4e6d4398b77df428c 100644 --- a/src/upnp/protocol/natpmp/nat_pmp.cpp +++ b/src/upnp/protocol/natpmp/nat_pmp.cpp @@ -15,6 +15,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "nat_pmp.h" +#include <poll.h> #if HAVE_LIBNATPMP @@ -333,13 +334,14 @@ NatPmp::readResponse(natpmp_t& handle, natpmpresp_t& response) break; } - fd_set fds; + struct pollfd fds; + fds.fd = handle.s; + fds.events = POLLIN; struct timeval timeout; - FD_ZERO(&fds); - FD_SET(handle.s, &fds); getnatpmprequesttimeout(&handle, &timeout); + uint64_t millis = (timeout.tv_sec * (uint64_t)1000) + (timeout.tv_usec / 1000); // Wait for data. - if (select(FD_SETSIZE, &fds, NULL, NULL, &timeout) == -1) { + if (poll(&fds, 1, millis) == -1) { err = NATPMP_ERR_SOCKETERROR; break; }