summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2019-12-18 17:26:41 -0500
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-03-19 19:52:39 +0000
commit6bf3b36c59640fbcab75ceca0b12ec1480f7094d (patch)
tree6138f904cd2465f0ca501d5beb821412eafbcf90
parentb8a0a19d275fdd39dfe359b31beaa8def7be512b (diff)
downloadmongo-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.h4
-rw-r--r--src/mongo/util/net/sockaddr.cpp14
-rw-r--r--src/mongo/util/net/sockaddr.h2
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.