diff --git a/Libraries/LibCore/CTCPServer.cpp b/Libraries/LibCore/CTCPServer.cpp index f0705b7c0b..632812f496 100644 --- a/Libraries/LibCore/CTCPServer.cpp +++ b/Libraries/LibCore/CTCPServer.cpp @@ -53,3 +53,29 @@ RefPtr CTCPServer::accept() return CTCPSocket::construct(accepted_fd); } + +IPv4Address CTCPServer::local_address() +{ + if (m_fd == -1) + return {}; + + sockaddr_in address; + socklen_t len = sizeof(address); + if (getsockname(m_fd, (sockaddr*)&address, &len) != 0) + return 0; + + return IPv4Address(address.sin_addr.s_addr); +} + +u16 CTCPServer::local_port() +{ + if (m_fd == -1) + return 0; + + sockaddr_in address; + socklen_t len = sizeof(address); + if (getsockname(m_fd, (sockaddr*)&address, &len) != 0) + return 0; + + return ntohs(address.sin_port); +} diff --git a/Libraries/LibCore/CTCPServer.h b/Libraries/LibCore/CTCPServer.h index 8e2b6920eb..4f17f61801 100644 --- a/Libraries/LibCore/CTCPServer.h +++ b/Libraries/LibCore/CTCPServer.h @@ -16,6 +16,9 @@ public: RefPtr accept(); + IPv4Address local_address(); + u16 local_port(); + Function on_ready_to_accept; private: