diff --git a/httplib.h b/httplib.h index b3441e7..e640670 100644 --- a/httplib.h +++ b/httplib.h @@ -98,6 +98,7 @@ typedef int socket_t; #include #include #include +#include #include #include #include @@ -2550,6 +2551,12 @@ inline bool Server::listen_internal() { socket_t sock = accept(svr_sock_, nullptr, nullptr); if (sock == INVALID_SOCKET) { + if (errno == EMFILE) { + // The per-process limit of open file descriptors has been reached. + // Try to accept new connections after a short sleep. + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + continue; + } if (svr_sock_ != INVALID_SOCKET) { detail::close_socket(svr_sock_); ret = false;