From 8c7383df53c042ed79440e44ed7e1903aea20786 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Fri, 1 Aug 2025 12:42:30 +0100 Subject: feat: fix network container improvements. Signed-off-by: Amlal El Mahrouss --- dev/lib/fix/network.hpp | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) (limited to 'dev/lib') diff --git a/dev/lib/fix/network.hpp b/dev/lib/fix/network.hpp index dce6b63..abdb00a 100644 --- a/dev/lib/fix/network.hpp +++ b/dev/lib/fix/network.hpp @@ -10,7 +10,6 @@ #include #include - #include namespace snu::fix @@ -29,16 +28,23 @@ namespace snu::fix delivery_modem& operator=(const delivery_modem&) = default; delivery_modem(const delivery_modem&) = default; + static constexpr auto local_address = "127.0.0.1"; + static constexpr auto backlog_cnt = 18U; + public: delivery_socket_type fd_{}; template bool receive(T& out, std::size_t len) noexcept { + if (!out) + return false; + if (!len) return false; - auto ret = ::recv(fd_, &out, len, 0); + auto ret = ::recv(fd_, out, len, MSG_WAITALL); + return ret > 0; } @@ -47,17 +53,42 @@ namespace snu::fix { if (!out) return false; + if (!len) return false; auto ret = ::send(fd_, out, len, 0); + return ret > 0; } - bool construct() noexcept + template + bool construct(const char* addr = local_address, const bool& is_server = false) noexcept { - fd_ = ::socket(SOCK_STREAM, AF_INET, 0); - return fd_ > 0; + static_assert(Kind != 0, "Kind is zero"); + static_assert(IPProto != 0, "IPProto is zero"); + + fd_ = ::socket(PF, Kind, IPProto); + + if (fd_ < 1) + return false; + + struct sockaddr_in addr_ + { + }; + + addr_.sin_addr.s_addr = ::inet_addr(addr); + addr_.sin_port = Port; + + if (!is_server) + { + auto ret = ::connect(fd_, (struct sockaddr*)&addr_, sizeof(decltype(addr_))); + return ret == 0; + } + + ::listen(fd_, backlog_cnt); + + return true; } bool destroy() noexcept -- cgit v1.2.3