From b22150de94589e56e11259c18b8371479d9b3d4f Mon Sep 17 00:00:00 2001 From: Andreas Tsouchlos Date: Sat, 19 Apr 2025 14:29:25 +0200 Subject: [PATCH] Fix bugs; Add doc comments --- src/tcp.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/tcp.cpp b/src/tcp.cpp index 6e96c4f..97fab16 100644 --- a/src/tcp.cpp +++ b/src/tcp.cpp @@ -39,7 +39,6 @@ inline sockaddr_in get_local_address(uint16_t port) { } - } // namespace @@ -74,14 +73,14 @@ std::expected NonBlockingServer::start_listening(uint16_t port) { sizeof(serverAddress)) != 0) { spdlog::error("tcp::NonBlockingServer: bind() failed with errno={}", errno); - close(m_serverSocket); + close_server_socket(); return std::unexpected{errno}; }; if (::listen(m_serverSocket, 1) != 0) { spdlog::error("tcp::NonBlockingServer: listen() failed with errno={}", errno); - close(m_serverSocket); + close_server_socket(); return std::unexpected{errno}; } @@ -181,6 +180,7 @@ NonBlockingServer::create_server_socket() { if (m_serverSocket < 1) { spdlog::error("tcp::NonBlockingServer: socket() failed with errno={}", errno); + close_server_socket(); return std::unexpected{errno}; } @@ -291,6 +291,15 @@ void NonBlockingClient::disconnect() { close_socket(); } +/// +/// @brief Get last known connection status +/// @return - expected(EINPROGRESS) if connection is still being attempted +/// - expected(EISCONN) if already connected +/// - expected(error code) if an error occurred during connection (e.g., +/// ECONNREFUSED) +/// - unexpected(errno) if an error occurred while checking connection +/// status +/// [[nodiscard]] std::expected NonBlockingClient::get_last_connection_status() { if (!m_startedNewConAttempt) return m_lastKnownConStatus; @@ -369,6 +378,7 @@ NonBlockingClient::recv(std::span buffer) { if (m_socket < 1) { spdlog::error("tcp::NonBlockingClient: socket() failed with errno={}", errno); + close_socket(); return std::unexpected{errno}; } @@ -409,6 +419,11 @@ void NonBlockingClient::close_socket() { m_pfdIn.fd = -1; } + +/// +/// @return true if there is new output event, i.e., the connect() operation has +/// completed (successfully or not) +/// [[nodiscard]] std::expected NonBlockingClient::socket_has_new_output_event() { int ret = poll(&m_pfdOut, 1, 0);