Add a length to QuicSocketAddress(sockaddr*) constructor

The length is always required when a socket address is passed as anything other than sockaddr_storage, since the size of the socket address can exceed sizeof(sockaddr).

gfe-relnote: n/a (no functional change)
PiperOrigin-RevId: 252482781
Change-Id: I7412c2abb7a18cc33326d6b805397ca244b1cc64
diff --git a/quic/platform/api/quic_socket_address.cc b/quic/platform/api/quic_socket_address.cc
index e0bb35c..f6d40df 100644
--- a/quic/platform/api/quic_socket_address.cc
+++ b/quic/platform/api/quic_socket_address.cc
@@ -14,8 +14,8 @@
 QuicSocketAddress::QuicSocketAddress(const struct sockaddr_storage& saddr)
     : impl_(saddr) {}
 
-QuicSocketAddress::QuicSocketAddress(const struct sockaddr& saddr)
-    : impl_(saddr) {}
+QuicSocketAddress::QuicSocketAddress(const sockaddr* saddr, socklen_t len)
+    : impl_(saddr, len) {}
 
 QuicSocketAddress::QuicSocketAddress(const QuicSocketAddressImpl& impl)
     : impl_(impl) {}
diff --git a/quic/platform/api/quic_socket_address.h b/quic/platform/api/quic_socket_address.h
index 85e61d5..94e78a6 100644
--- a/quic/platform/api/quic_socket_address.h
+++ b/quic/platform/api/quic_socket_address.h
@@ -21,7 +21,7 @@
   QuicSocketAddress() = default;
   QuicSocketAddress(QuicIpAddress address, uint16_t port);
   explicit QuicSocketAddress(const struct sockaddr_storage& saddr);
-  explicit QuicSocketAddress(const struct sockaddr& saddr);
+  explicit QuicSocketAddress(const sockaddr* saddr, socklen_t len);
   explicit QuicSocketAddress(const QuicSocketAddressImpl& impl);
   QuicSocketAddress(const QuicSocketAddress& other) = default;
   QuicSocketAddress& operator=(const QuicSocketAddress& other) = default;
diff --git a/quic/platform/api/quic_socket_address_test.cc b/quic/platform/api/quic_socket_address_test.cc
index 740f801..48ef46e 100644
--- a/quic/platform/api/quic_socket_address_test.cc
+++ b/quic/platform/api/quic_socket_address_test.cc
@@ -38,7 +38,8 @@
   address.v4.sin_family = AF_INET;
   address.v4.sin_addr = QuicIpAddress::Loopback4().GetIPv4();
   address.v4.sin_port = htons(443);
-  EXPECT_EQ("127.0.0.1:443", QuicSocketAddress(address.addr).ToString());
+  EXPECT_EQ("127.0.0.1:443",
+            QuicSocketAddress(&address.addr, sizeof(address.v4)).ToString());
   EXPECT_EQ("127.0.0.1:443", QuicSocketAddress(address.storage).ToString());
 }
 
@@ -53,7 +54,8 @@
   address.v6.sin6_family = AF_INET6;
   address.v6.sin6_addr = QuicIpAddress::Loopback6().GetIPv6();
   address.v6.sin6_port = htons(443);
-  EXPECT_EQ("[::1]:443", QuicSocketAddress(address.addr).ToString());
+  EXPECT_EQ("[::1]:443",
+            QuicSocketAddress(&address.addr, sizeof(address.v6)).ToString());
   EXPECT_EQ("[::1]:443", QuicSocketAddress(address.storage).ToString());
 }
 
diff --git a/quic/tools/quic_epoll_client_factory.cc b/quic/tools/quic_epoll_client_factory.cc
index 3b6b2ee..049646b 100644
--- a/quic/tools/quic_epoll_client_factory.cc
+++ b/quic/tools/quic_epoll_client_factory.cc
@@ -32,7 +32,7 @@
   CHECK(info_list != nullptr);
   std::unique_ptr<addrinfo, void (*)(addrinfo*)> info_list_owned(info_list,
                                                                  freeaddrinfo);
-  return QuicSocketAddress(*info_list->ai_addr);
+  return QuicSocketAddress(info_list->ai_addr, info_list->ai_addrlen);
 }
 
 }  // namespace