diff --git a/src/pvxs/source.h b/src/pvxs/source.h index ccb9956..a2b2d2e 100644 --- a/src/pvxs/source.h +++ b/src/pvxs/source.h @@ -186,15 +186,15 @@ struct PVXS_API Source { private: typedef std::vector _names_t; _names_t _names; - SockAddr _src; + char _src[24]; friend struct Server::Pvt; friend struct impl::ServerConn; public: _names_t::iterator begin() { return _names.begin(); } _names_t::iterator end() { return _names.end(); } - //! The Client endpoint address in "X.X.X.X:Y" format. - const SockAddr& source() const { return _src; } + //! The Client endpoint address + const char* source() const { return _src; } }; /** Called each time a client polls for the existance of some Channel names. * diff --git a/src/server.cpp b/src/server.cpp index 7435ad4..b65c360 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -433,6 +433,7 @@ void Server::Pvt::onSearch(const UDPManager::Search& msg) searchOp._names[i]._name = msg.names[i].name; searchOp._names[i]._claim = false; } + ipAddrToDottedIP(&msg.server->in, searchOp._src, sizeof(searchOp._src)); { auto G(sourcesLock.lockReader()); diff --git a/src/serverchan.cpp b/src/serverchan.cpp index 0dc0b2c..27a4a37 100644 --- a/src/serverchan.cpp +++ b/src/serverchan.cpp @@ -204,7 +204,8 @@ void ServerConn::handle_SEARCH() from_wire(M, nchan); server::Source::Search op; - op._src = peerAddr; + strncpy(op._src, peerName.c_str(), sizeof(op._src)-1); + op._src[sizeof(op._src)-1] = '\0'; std::vector> nameStorage(nchan); op._names.resize(nchan);