mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-26 23:11:01 +00:00
Handle listen/accept/send/receive in afd_endpoint
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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_{};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user