diff options
Diffstat (limited to 'src/server.cpp')
| -rw-r--r-- | src/server.cpp | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/src/server.cpp b/src/server.cpp index db92481..cd0c698 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2,6 +2,7 @@ #include "log.hpp" #include <cstring> #include <memory> +#include <mutex> #include <sys/socket.h> CServer::CServer(uint16_t port) @@ -11,20 +12,24 @@ CServer::CServer(uint16_t port) constexpr int opt = 1; constexpr int size = sizeof(opt); - if (setsockopt(m_sockfd->get(), SOL_SOCKET, SO_REUSEADDR, &opt, size) < 0) - log(stderr, WARN, "setsockopt(SO_REUSEADDR) failed"); - - if (setsockopt(m_sockfd->get(), SOL_SOCKET, SO_KEEPALIVE, &opt, size) < 0) - log(stderr, WARN, "setsockopt(SO_KEEPALIVE) failed"); - - memset(&m_addr, 0, sizeof(m_addr)); - m_addr.sin_family = AF_INET; - m_addr.sin_port = htons(port); - m_addr.sin_addr.s_addr = INADDR_ANY; - bind(m_sockfd->get(), reinterpret_cast<sockaddr *>(&m_addr), sizeof(m_addr)) || - listen(m_sockfd->get(), 5) - ? throw std::runtime_error("Failed to bind or listen") - : log(LOG, "Server started on port: {}", port); + { + std::lock_guard<std::mutex> lock(m_mutex); + + if (setsockopt(m_sockfd->get(), SOL_SOCKET, SO_REUSEADDR, &opt, size) < 0) + log(stderr, WARN, "setsockopt(SO_REUSEADDR) failed"); + + if (setsockopt(m_sockfd->get(), SOL_SOCKET, SO_KEEPALIVE, &opt, size) < 0) + log(stderr, WARN, "setsockopt(SO_KEEPALIVE) failed"); + + memset(&m_addr, 0, sizeof(m_addr)); + m_addr.sin_family = AF_INET; + m_addr.sin_port = htons(port); + m_addr.sin_addr.s_addr = INADDR_ANY; + bind(m_sockfd->get(), reinterpret_cast<sockaddr *>(&m_addr), sizeof(m_addr)) || + listen(m_sockfd->get(), 5) + ? throw std::runtime_error("Failed to bind or listen") + : log(LOG, "Server started on port: {}", port); + } log(LOG, "Server: initialized"); }; |
