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);