diff options
-rw-r--r-- | src/event/ServerSocket.cxx | 23 | ||||
-rw-r--r-- | src/event/ServerSocket.hxx | 2 |
2 files changed, 16 insertions, 9 deletions
diff --git a/src/event/ServerSocket.cxx b/src/event/ServerSocket.cxx index 552efb0a3..b1cffcfda 100644 --- a/src/event/ServerSocket.cxx +++ b/src/event/ServerSocket.cxx @@ -20,6 +20,7 @@ #include "config.h" #include "ServerSocket.hxx" #include "net/StaticSocketAddress.hxx" +#include "net/AllocatedSocketAddress.hxx" #include "net/SocketAddress.hxx" #include "net/SocketUtil.hxx" #include "net/SocketError.hxx" @@ -64,31 +65,26 @@ class OneServerSocket final : private SocketMonitor { AllocatedPath path; #endif - SocketAddress address; + const AllocatedSocketAddress address; public: + template<typename A> OneServerSocket(EventLoop &_loop, ServerSocket &_parent, unsigned _serial, - SocketAddress _address) + A &&_address) :SocketMonitor(_loop), parent(_parent), serial(_serial), #ifdef HAVE_UN path(AllocatedPath::Null()), #endif - address((sockaddr *)xmemdup(_address.GetAddress(), - _address.GetSize()), - _address.GetSize()) + address(std::forward<A>(_address)) { - assert(!_address.IsNull()); - assert(_address.GetSize() > 0); } OneServerSocket(const OneServerSocket &other) = delete; OneServerSocket &operator=(const OneServerSocket &other) = delete; ~OneServerSocket() { - free(const_cast<struct sockaddr *>(address.GetAddress())); - if (IsDefined()) Close(); } @@ -299,6 +295,15 @@ ServerSocket::AddAddress(SocketAddress address) return sockets.back(); } +OneServerSocket & +ServerSocket::AddAddress(AllocatedSocketAddress &&address) +{ + sockets.emplace_back(loop, *this, next_serial, + std::move(address)); + + return sockets.back(); +} + bool ServerSocket::AddFD(int fd, Error &error) { diff --git a/src/event/ServerSocket.hxx b/src/event/ServerSocket.hxx index ec91dc3fb..a59ac3f2a 100644 --- a/src/event/ServerSocket.hxx +++ b/src/event/ServerSocket.hxx @@ -25,6 +25,7 @@ #include <stddef.h> class SocketAddress; +class AllocatedSocketAddress; class EventLoop; class Error; class AllocatedPath; @@ -52,6 +53,7 @@ public: private: OneServerSocket &AddAddress(SocketAddress address); + OneServerSocket &AddAddress(AllocatedSocketAddress &&address); /** * Add a listener on a port on all IPv4 interfaces. |