diff --git a/src/main.cpp b/src/main.cpp index 61880e5..d24847f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,8 +8,8 @@ int main() { spdlog::set_level(spdlog::level::debug); - tcp::NonBlockingServer server{{.port = 65432}}; - if (auto res = server.start_listening(); !res) { + tcp::NonBlockingServer server{}; + if (auto res = server.start_listening(65432); !res) { spdlog::error("Failed to start server: {}", res.error()); return 1; } diff --git a/src/tcp.cpp b/src/tcp.cpp index 2960e1b..0071ad8 100644 --- a/src/tcp.cpp +++ b/src/tcp.cpp @@ -53,16 +53,12 @@ namespace tcp { // -NonBlockingServer::NonBlockingServer(ServerSettings settings) - : m_settings{settings}, m_serverAddress(get_local_address(settings.port)) { -} - NonBlockingServer::~NonBlockingServer() { close_client_socket(); close_server_socket(); } -std::expected NonBlockingServer::start_listening() { +std::expected NonBlockingServer::start_listening(uint16_t port) { /// Create socket close_server_socket(); @@ -72,8 +68,10 @@ std::expected NonBlockingServer::start_listening() { /// Bin socket and start listening - if (::bind(m_serverSocket, (struct sockaddr*)&m_serverAddress, - sizeof(m_serverAddress)) != 0) { + const struct sockaddr_in serverAddress = get_local_address(port); + + if (::bind(m_serverSocket, (struct sockaddr*)&serverAddress, + sizeof(serverAddress)) != 0) { spdlog::error("tcp::NonBlockingServer: bind() failed with errno={}", errno); close(m_serverSocket); diff --git a/src/tcp.hpp b/src/tcp.hpp index 647a572..32a7e47 100644 --- a/src/tcp.hpp +++ b/src/tcp.hpp @@ -18,26 +18,24 @@ namespace tcp { using HostString = std::array; + // // // Non blocking server // // -struct ServerSettings { - uint16_t port = 0; -}; class NonBlockingServer { public: - NonBlockingServer(ServerSettings settings); + NonBlockingServer() = default; NonBlockingServer(const NonBlockingServer&) = delete; NonBlockingServer(NonBlockingServer&&) = delete; NonBlockingServer& operator=(const NonBlockingServer&) = delete; NonBlockingServer& operator=(NonBlockingServer&&) = delete; ~NonBlockingServer(); - [[nodiscard]] std::expected start_listening(); + [[nodiscard]] std::expected start_listening(uint16_t port); bool next_client_available(); [[nodiscard]] std::expected accept_next_client(); diff --git a/tests/tcp.cpp b/tests/tcp.cpp index f92d37a..0d4a696 100644 --- a/tests/tcp.cpp +++ b/tests/tcp.cpp @@ -8,10 +8,10 @@ TEST(TcpServer, Accept) { - tcp::NonBlockingServer server{{.port = 1234}}; + tcp::NonBlockingServer server; tcp::NonBlockingClient client; - auto lisRes = server.start_listening(); + auto lisRes = server.start_listening(1234); EXPECT_FALSE(server.next_client_available()); @@ -25,12 +25,12 @@ TEST(TcpServer, Accept) { } TEST(TcpServer, DataAvailable) { - tcp::NonBlockingServer server{{.port = 1234}}; + tcp::NonBlockingServer server; tcp::NonBlockingClient client; EXPECT_FALSE(server.data_available()); - auto lisRes = server.start_listening(); + auto lisRes = server.start_listening(1234); auto conRes = client.connect({"localhost"}, 1234); auto accRes = server.accept_next_client(); @@ -48,10 +48,10 @@ TEST(TcpServer, DataAvailable) { } TEST(TcpServer, GetClientIPAsString) { - tcp::NonBlockingServer server{{.port = 1234}}; + tcp::NonBlockingServer server; tcp::NonBlockingClient client; - auto lisRes = server.start_listening(); + auto lisRes = server.start_listening(1234); auto conRes = client.connect({"localhost"}, 1234); auto accRes = server.accept_next_client(); auto ipRes = server.get_client_ip_as_string(); @@ -61,7 +61,7 @@ TEST(TcpServer, GetClientIPAsString) { } TEST(TcpClient, Connect) { - tcp::NonBlockingServer server{{.port = 1234}}; + tcp::NonBlockingServer server; tcp::NonBlockingClient client; /// Default connection status, i.e., before attempting connection @@ -80,7 +80,7 @@ TEST(TcpClient, Connect) { /// Connection status when connection is acknowledged - auto lisRes = server.start_listening(); + auto lisRes = server.start_listening(1234); auto conRes2 = client.connect({"localhost"}, 1234); @@ -98,12 +98,12 @@ TEST(TcpClient, Connect) { } TEST(TcpClient, Reconnect) { - tcp::NonBlockingServer server1{{.port = 1234}}; - tcp::NonBlockingServer server2{{.port = 2345}}; + tcp::NonBlockingServer server1; + tcp::NonBlockingServer server2; tcp::NonBlockingClient client; - auto lisRes1 = server1.start_listening(); - auto lisRes2 = server2.start_listening(); + auto lisRes1 = server1.start_listening(1234); + auto lisRes2 = server2.start_listening(2345); auto conRes1 = client.connect({"localhost"}, 1234); @@ -119,12 +119,12 @@ TEST(TcpClient, Reconnect) { } TEST(TcpClient, DataAvailable) { - tcp::NonBlockingServer server{{.port = 1234}}; + tcp::NonBlockingServer server; tcp::NonBlockingClient client; EXPECT_FALSE(client.data_available()); - auto lisRes = server.start_listening(); + auto lisRes = server.start_listening(1234); auto conRes = client.connect({"localhost"}, 1234); auto accRes = server.accept_next_client(); @@ -145,10 +145,10 @@ TEST(TcpClient, DataAvailable) { } TEST(TcpClientServer, ClientSendServerReceive) { - tcp::NonBlockingServer server{{.port = 1234}}; + tcp::NonBlockingServer server; tcp::NonBlockingClient client; - auto lisRes = server.start_listening(); + auto lisRes = server.start_listening(1234); auto conRes = client.connect({"localhost"}, 1234); auto accRes = server.accept_next_client(); @@ -165,10 +165,10 @@ TEST(TcpClientServer, ClientSendServerReceive) { } TEST(TcpClientServer, ClientReceiveServerSend) { - tcp::NonBlockingServer server{{.port = 1234}}; + tcp::NonBlockingServer server; tcp::NonBlockingClient client; - auto lisRes = server.start_listening(); + auto lisRes = server.start_listening(1234); auto conRes = client.connect({"localhost"}, 1234); auto accRes = server.accept_next_client();