diff --git a/qse/include/qse/si/Socket.hpp b/qse/include/qse/si/Socket.hpp index b80b0afb..6a2f3280 100644 --- a/qse/include/qse/si/Socket.hpp +++ b/qse/include/qse/si/Socket.hpp @@ -60,6 +60,9 @@ public: // -------------------------------------------------------------------- + int getSockName (SocketAddress& addr) QSE_CPP_NOEXCEPT; + int getPeerName (SocketAddress& addr) QSE_CPP_NOEXCEPT; + int getOption (int level, int optname, void* optval, qse_sck_len_t* optlen) QSE_CPP_NOEXCEPT; int setOption (int level, int optname, const void* optval, qse_sck_len_t optlen) QSE_CPP_NOEXCEPT; diff --git a/qse/lib/si/Socket.cpp b/qse/lib/si/Socket.cpp index 7b8f892c..13450b1e 100644 --- a/qse/lib/si/Socket.cpp +++ b/qse/lib/si/Socket.cpp @@ -152,6 +152,24 @@ void Socket::close () QSE_CPP_NOEXCEPT } } +int Socket::getSockName (SocketAddress& addr) QSE_CPP_NOEXCEPT +{ + QSE_ASSERT (qse_is_sck_valid(this->handle)); + qse_sck_len_t len = addr.getAddrCapa(); + int n = ::getsockname(this->handle, (struct sockaddr*)addr.getAddrPtr(), &len); + if (n == -1) this->setErrorCode (syserr_to_errnum(errno)); + return n; +} + +int Socket::getPeerName (SocketAddress& addr) QSE_CPP_NOEXCEPT +{ + QSE_ASSERT (qse_is_sck_valid(this->handle)); + qse_sck_len_t len = addr.getAddrCapa(); + int n = ::getpeername(this->handle, (struct sockaddr*)addr.getAddrPtr(), &len); + if (n == -1) this->setErrorCode (syserr_to_errnum(errno)); + return n; +} + int Socket::getOption (int level, int optname, void* optval, qse_sck_len_t* optlen) QSE_CPP_NOEXCEPT { QSE_ASSERT (qse_is_sck_valid(this->handle));