From 5892e131b6d52c9516d751c552804edf1abaa9e5 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Thu, 24 Oct 2019 10:49:44 -0700 Subject: [PATCH] adapt SockAddr --- src/evhelper.cpp | 4 ++-- src/pvxs/util.h | 10 +++++++--- src/util.cpp | 6 ++++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/evhelper.cpp b/src/evhelper.cpp index 8829de6..66cb52b 100644 --- a/src/evhelper.cpp +++ b/src/evhelper.cpp @@ -312,11 +312,11 @@ evsocket::~evsocket() void evsocket::bind(SockAddr& addr) const { - int ret = ::bind(sock, &addr->sa, sizeof(addr.store)); + int ret = ::bind(sock, &addr->sa, addr.size()); if(ret!=0) throw std::runtime_error(SB()<<"Bind error to "<sa, &slen); if(ret) log_printf(logerr, PLVL_ERR, "Unable to fetch address of newly bound socket\n"); diff --git a/src/pvxs/util.h b/src/pvxs/util.h index 69e2f90..5cc3b93 100644 --- a/src/pvxs/util.h +++ b/src/pvxs/util.h @@ -55,10 +55,14 @@ struct PVXS_API SockAddr { #ifdef AF_INET6 sockaddr_in6 in6; #endif - } store; + }; +private: + store_t store; +public: - SockAddr() :SockAddr(AF_UNSPEC) {} - explicit SockAddr(int af); + explicit SockAddr(int af = AF_UNSPEC); + explicit SockAddr(int af, const char *address); + inline explicit SockAddr(int af, const std::string& address) :SockAddr(af, address.c_str()) {} inline size_t size() const { return sizeof(store); } diff --git a/src/util.cpp b/src/util.cpp index de4cdbf..6c21e22 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -75,6 +75,12 @@ SockAddr::SockAddr(int af) throw std::invalid_argument("Unsupported address family"); } +SockAddr::SockAddr(int af, const char *address) + :SockAddr(af) +{ + setAddress(address); +} + unsigned short SockAddr::port() const { switch(store.sa.sa_family) {