Handle listen/accept/send/receive in afd_endpoint

This commit is contained in:
Igor Pissolati
2025-05-20 00:56:22 -03:00
parent 0f4cc3365c
commit f5ed0752e3
9 changed files with 412 additions and 11 deletions

View File

@@ -77,6 +77,33 @@ namespace network
return ::bind(this->socket_, &target.get_addr(), target.get_size()) == 0;
}
// NOLINTNEXTLINE(readability-make-member-function-const)
bool socket::listen(int backlog)
{
int result = ::listen(this->socket_, backlog);
if (result == 0)
{
listening_ = true;
return true;
}
return false;
}
// NOLINTNEXTLINE(readability-make-member-function-const)
SOCKET socket::accept(address& address)
{
sockaddr addr{};
int addrlen = sizeof(sockaddr);
const auto s = ::accept(this->socket_, &addr, &addrlen);
if (s != INVALID_SOCKET)
{
address.set_address(&addr, addrlen);
}
return s;
}
// NOLINTNEXTLINE(readability-make-member-function-const)
bool socket::set_blocking(const bool blocking)
{
@@ -158,6 +185,11 @@ namespace network
return this->is_valid() && is_socket_ready(this->socket_, in_poll);
}
bool socket::is_listening() const
{
return this->is_valid() && listening_;
}
bool socket::sleep_sockets(const std::span<const socket*>& sockets, const std::chrono::milliseconds timeout,
const bool in_poll)
{

View File

@@ -47,6 +47,8 @@ namespace network
bool is_valid() const;
bool bind(const address& target);
bool listen(int backlog);
SOCKET accept(address& address);
bool set_blocking(bool blocking);
static bool set_blocking(SOCKET s, bool blocking);
@@ -62,6 +64,7 @@ namespace network
int get_address_family() const;
bool is_ready(bool in_poll) const;
bool is_listening() const;
static bool sleep_sockets(const std::span<const socket*>& sockets, std::chrono::milliseconds timeout,
bool in_poll);
@@ -74,5 +77,6 @@ namespace network
private:
SOCKET socket_ = INVALID_SOCKET;
bool listening_{};
};
}

View File

@@ -43,6 +43,7 @@ using NTSTATUS = std::uint32_t;
#define STATUS_FILE_IS_A_DIRECTORY ((NTSTATUS)0xC00000BAL)
#define STATUS_NOT_SUPPORTED ((NTSTATUS)0xC00000BBL)
#define STATUS_INVALID_ADDRESS ((NTSTATUS)0xC0000141L)
#define STATUS_CONNECTION_RESET ((NTSTATUS)0xC000020DL)
#define STATUS_NOT_FOUND ((NTSTATUS)0xC0000225L)
#define STATUS_CONNECTION_REFUSED ((NTSTATUS)0xC0000236L)
#define STATUS_TIMER_RESOLUTION_NOT_SET ((NTSTATUS)0xC0000245L)