# HG changeset patch # User David Demelier # Date 1426262274 -3600 # Node ID 6efe3cbe7df54a87843ca485b3d4b9447e3b4440 # Parent 54dda199b2ef46d7985ed6a9f5fe7c13e90265e1 Socket: provide a function to retrieve the address using getsockname diff -r 54dda199b2ef -r 6efe3cbe7df5 C++/modules/Socket/Socket.cpp --- a/C++/modules/Socket/Socket.cpp Wed Mar 11 09:45:28 2015 +0100 +++ b/C++/modules/Socket/Socket.cpp Fri Mar 13 16:57:54 2015 +0100 @@ -119,6 +119,22 @@ m_state = SocketState::Opened; } +SocketAddress Socket::address() const +{ +#if defined(_WIN32) + int length; +#else + socklen_t length; +#endif + + sockaddr_storage ss; + + if (getsockname(m_handle, (sockaddr *)&ss, &length) == Error) + throw SocketError(SocketError::System, "getsockname"); + + return SocketAddress(ss, length); +} + void Socket::bind(const SocketAddress &address) { const auto &sa = address.address(); diff -r 54dda199b2ef -r 6efe3cbe7df5 C++/modules/Socket/Socket.h --- a/C++/modules/Socket/Socket.h Wed Mar 11 09:45:28 2015 +0100 +++ b/C++/modules/Socket/Socket.h Fri Mar 13 16:57:54 2015 +0100 @@ -296,6 +296,14 @@ virtual ~Socket() = default; /** + * Get the local name. This is a wrapper of getsockname(). + * + * @return the address + * @throw SocketError on failures + */ + SocketAddress address() const; + + /** * Set an option for the socket. * * @param level the setting level