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 19:52:39 +0000 |
commit | 6bf3b36c59640fbcab75ceca0b12ec1480f7094d (patch) | |
tree | 6138f904cd2465f0ca501d5beb821412eafbcf90 | |
parent | b8a0a19d275fdd39dfe359b31beaa8def7be512b (diff) | |
download | mongo-6bf3b36c59640fbcab75ceca0b12ec1480f7094d.tar.gz |
SERVER-45156 SockAddr constructor should take sockaddr, not sockaddr_storage
(cherry picked from commit e742c986376a7c06cee67d369261feab0efea1d3)
-rw-r--r-- | src/mongo/transport/asio_utils.h | 4 | ||||
-rw-r--r-- | src/mongo/util/net/sockaddr.cpp | 14 | ||||
-rw-r--r-- | src/mongo/util/net/sockaddr.h | 2 |
3 files changed, 6 insertions, 14 deletions
diff --git a/src/mongo/transport/asio_utils.h b/src/mongo/transport/asio_utils.h index 818d39bdf57..142ba966b34 100644 --- a/src/mongo/transport/asio_utils.h +++ b/src/mongo/transport/asio_utils.h @@ -40,9 +40,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/util/net/sockaddr.cpp b/src/mongo/util/net/sockaddr.cpp index 008954d2490..d1d58ab56b1 100644 --- a/src/mongo/util/net/sockaddr.cpp +++ b/src/mongo/util/net/sockaddr.cpp @@ -182,21 +182,15 @@ std::vector<SockAddr> SockAddr::createAll(StringData target, int port, sa_family } std::set<SockAddr> ret; - struct sockaddr_storage storage; - memset(&storage, 0, sizeof(storage)); for (const auto* addrs = addrErr.second.get(); addrs; addrs = addrs->ai_next) { - fassert(40594, 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(struct 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 dfbee6db3c0..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(struct 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. |