From af8dc072c1e0ac96483b65a69007b94cb4db2abb Mon Sep 17 00:00:00 2001 From: hugogogo Date: Sun, 31 Jul 2022 12:31:55 +0200 Subject: [PATCH] added setsockopt to avoid reusability issue on socket fd --- srcs/webserv/init.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/srcs/webserv/init.cpp b/srcs/webserv/init.cpp index b773964..4c5956e 100644 --- a/srcs/webserv/init.cpp +++ b/srcs/webserv/init.cpp @@ -24,6 +24,18 @@ void Webserv::init_virtual_servers(std::vector* servers) std::perror("err socket()"); throw std::runtime_error("Socket init"); } + // HUGO ADD + // + // allow socket descriptor to be reuseable + // I just copied it from https://www.ibm.com/docs/en/i/7.2?topic=designs-example-nonblocking-io-select + int on = 1; + if (setsockopt(ret, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) < 0) + { + ::perror("err setsockopt()"); + throw std::runtime_error("Socket init"); + } + // + // HUGO ADD END _listen_sockets.push_back(ret); _bind(_listen_sockets.back(), std::atoi(it->port.data()), it->host);