diff --git a/httplib.h b/httplib.h index 4921880..4734046 100644 --- a/httplib.h +++ b/httplib.h @@ -3212,7 +3212,10 @@ inline ssize_t select_read_impl(socket_t sock, socket_t extra_fd, time_t sec, pfd_read[1].events = POLLIN; } - auto timeout = static_cast(sec * 1000 + usec / 1000); + auto timeout = + static_cast((WithExtraFD && sec == static_cast(-1)) + ? -1 + : sec * 1000 + usec / 1000); size_t ret = handle_EINTR([&]() { return poll(pfd_read, nfds, timeout); }); if (WithExtraFD && ret > 0) { @@ -3240,12 +3243,15 @@ inline ssize_t select_read_impl(socket_t sock, socket_t extra_fd, time_t sec, nfds = static_cast(sock + 1); } - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); + timeval tv, *ptv = nullptr; + if (!WithExtraFD || sec != static_cast(-1)) { + tv.tv_sec = static_cast(sec); + tv.tv_usec = static_cast(usec); + ptv = &tv; + } ssize_t ret = - handle_EINTR([&]() { return select(nfds, &fds, nullptr, nullptr, &tv); }); + handle_EINTR([&]() { return select(nfds, &fds, nullptr, nullptr, ptv); }); if (WithExtraFD && ret > 0) { assert(sock_readable && extra_fd_readable); *sock_readable = FD_ISSET(sock, &fds);