Decouple bind interface from socket creation to more easily reuse in different implementations.
No behavioral change.
PiperOrigin-RevId: 485633421
diff --git a/quiche/quic/tools/quic_client_default_network_helper.cc b/quiche/quic/tools/quic_client_default_network_helper.cc
index 8a9a347..ab9e1b1 100644
--- a/quiche/quic/tools/quic_client_default_network_helper.cc
+++ b/quiche/quic/tools/quic_client_default_network_helper.cc
@@ -234,17 +234,25 @@
*overflow_supported = api.EnableDroppedPacketCount(fd);
api.EnableReceiveTimestamp(fd);
+ if (!BindInterfaceNameIfNeeded(fd)) {
+ CleanUpUDPSocket(fd);
+ return kQuicInvalidSocketFd;
+ }
+
+ return fd;
+}
+
+bool QuicClientDefaultNetworkHelper::BindInterfaceNameIfNeeded(int fd) {
+ QuicUdpSocketApi api;
std::string interface_name = client_->interface_name();
if (!interface_name.empty()) {
if (!api.BindInterface(fd, interface_name)) {
QUIC_DLOG(WARNING) << "Failed to bind socket (" << fd
<< ") to interface (" << interface_name << ").";
- CleanUpUDPSocket(fd);
- return kQuicInvalidSocketFd;
+ return false;
}
}
-
- return fd;
+ return true;
}
} // namespace quic
diff --git a/quiche/quic/tools/quic_client_default_network_helper.h b/quiche/quic/tools/quic_client_default_network_helper.h
index a8ebc9d..a44af16 100644
--- a/quiche/quic/tools/quic_client_default_network_helper.h
+++ b/quiche/quic/tools/quic_client_default_network_helper.h
@@ -93,6 +93,9 @@
fds_unregistered_externally_ = true;
}
+ // Bind a socket to a specific network interface.
+ bool BindInterfaceNameIfNeeded(int fd);
+
private:
// Actually clean up |fd|.
void CleanUpUDPSocketImpl(int fd);