diff options
author | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2019-12-18 17:26:41 -0500 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-03-19 04:54:44 +0000 |
commit | aacf29014cd91d81dc4ca01648ebe2d2e9ea16dd (patch) | |
tree | 66c0509ea249d21fdad6e8ef35f47cc8bfe3feb9 /src | |
parent | 175d4ff4d482510b97cd4df59c30f6ab0a57867e (diff) | |
download | mongo-aacf29014cd91d81dc4ca01648ebe2d2e9ea16dd.tar.gz |
SERVER-45156 SockAddr constructor should take sockaddr, not sockaddr_storage
(cherry picked from commit e742c986376a7c06cee67d369261feab0efea1d3)
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/transport/asio_utils.h | 4 | ||||
-rw-r--r-- | src/mongo/transport/transport_layer_asio.cpp | 4 | ||||
-rw-r--r-- | src/mongo/util/net/sockaddr.cpp | 11 | ||||
-rw-r--r-- | src/mongo/util/net/sockaddr.h | 2 |
4 files changed, 7 insertions, 14 deletions
diff --git a/src/mongo/transport/asio_utils.h b/src/mongo/transport/asio_utils.h index 8d7dd745109..46a39f5697d 100644 --- a/src/mongo/transport/asio_utils.h +++ b/src/mongo/transport/asio_utils.h @@ -49,9 +49,7 @@ namespace mongo { namespace transport { inline SockAddr endpointToSockAddr(const asio::generic::stream_protocol::endpoint& endPoint) { - struct sockaddr_storage sa = {}; - memcpy(&sa, endPoint.data(), endPoint.size()); - SockAddr wrappedAddr(sa, endPoint.size()); + SockAddr wrappedAddr(endPoint.data(), endPoint.size()); return wrappedAddr; } diff --git a/src/mongo/transport/transport_layer_asio.cpp b/src/mongo/transport/transport_layer_asio.cpp index 0901c8d27cf..bdd7d3ec7a6 100644 --- a/src/mongo/transport/transport_layer_asio.cpp +++ b/src/mongo/transport/transport_layer_asio.cpp @@ -740,9 +740,7 @@ Status TransportLayerASIO::setup() { _listenerPort = endpointToHostAndPort(endpoint).port(); } - sockaddr_storage sa; - memcpy(&sa, addr->data(), addr->size()); - _acceptors.emplace_back(SockAddr(sa, addr->size()), std::move(acceptor)); + _acceptors.emplace_back(SockAddr(addr->data(), addr->size()), std::move(acceptor)); } if (_acceptors.empty() && _listenerOptions.isIngress()) { diff --git a/src/mongo/util/net/sockaddr.cpp b/src/mongo/util/net/sockaddr.cpp index 34a926eaf00..7c83c998eff 100644 --- a/src/mongo/util/net/sockaddr.cpp +++ b/src/mongo/util/net/sockaddr.cpp @@ -186,17 +186,14 @@ std::vector<SockAddr> SockAddr::createAll(StringData target, int port, sa_family memset(&storage, 0, sizeof(storage)); for (const auto* addrs = addrErr.second.get(); addrs; addrs = addrs->ai_next) { fassert(40594, static_cast<size_t>(addrs->ai_addrlen) <= sizeof(struct sockaddr_storage)); - // Make a temp copy in a local sockaddr_storage so that the - // SockAddr constructor below can copy the entire buffer - // without over-running addrinfo's storage - memcpy(&storage, addrs->ai_addr, addrs->ai_addrlen); - ret.emplace(storage, addrs->ai_addrlen); + ret.emplace(addrs->ai_addr, addrs->ai_addrlen); } return std::vector<SockAddr>(ret.begin(), ret.end()); } -SockAddr::SockAddr(const sockaddr_storage& other, socklen_t size) - : addressSize(size), _hostOrIp(), sa(other), _isValid(true) { +SockAddr::SockAddr(const sockaddr* other, socklen_t size) + : addressSize(size), _hostOrIp(), sa(), _isValid(true) { + memcpy(&sa, other, size); _hostOrIp = toString(true); } diff --git a/src/mongo/util/net/sockaddr.h b/src/mongo/util/net/sockaddr.h index 67f8304de2c..940cfbbde27 100644 --- a/src/mongo/util/net/sockaddr.h +++ b/src/mongo/util/net/sockaddr.h @@ -89,7 +89,7 @@ struct SockAddr { */ explicit SockAddr(StringData target, int port, sa_family_t familyHint); - explicit SockAddr(const sockaddr_storage& other, socklen_t size); + explicit SockAddr(const sockaddr* other, socklen_t size); /** * Resolve an ip or hostname to a vector of SockAddr objects. |