summaryrefslogtreecommitdiff
path: root/src
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 04:54:44 +0000
commitaacf29014cd91d81dc4ca01648ebe2d2e9ea16dd (patch)
tree66c0509ea249d21fdad6e8ef35f47cc8bfe3feb9 /src
parent175d4ff4d482510b97cd4df59c30f6ab0a57867e (diff)
downloadmongo-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.h4
-rw-r--r--src/mongo/transport/transport_layer_asio.cpp4
-rw-r--r--src/mongo/util/net/sockaddr.cpp11
-rw-r--r--src/mongo/util/net/sockaddr.h2
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.