Sadly IPv6 is still not present anywhere. The test was attempting to detect&skip such hosts, but the way it did that (essentially, by calling getaddrinfo) meant that it only detected hosts which have IPv6 support completely compiled out. It did not do anything about hosts which have it compiled in, but lack runtime configuration even for the ::1 loopback address. This patch changes the detection logic to use a new method. It does it by attempting to bind a socket to the appropriate loopback address. That should ensure the hosts loopback interface is fully set up. In an effort to avoid silently skipping the test on too many hosts, the test is fairly strict about the kind of error it expects in these cases -- it will only skip the test when receiving EADDRNOTAVAIL. If we find other error codes that can be reasonably returned in these situations, we can add more of them. The (small) change in TCPSocket.cpp is to ensure that the code correctly propagates the error received from the OS.
48 lines
1.6 KiB
C++
48 lines
1.6 KiB
C++
//===--------------------- SocketTestUtilities.h ----------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLDB_UNITTESTS_HOST_SOCKETTESTUTILITIES_H
|
|
#define LLDB_UNITTESTS_HOST_SOCKETTESTUTILITIES_H
|
|
|
|
#include <cstdio>
|
|
#include <functional>
|
|
#include <thread>
|
|
|
|
#include "lldb/Host/Config.h"
|
|
#include "lldb/Host/Socket.h"
|
|
#include "lldb/Host/common/TCPSocket.h"
|
|
#include "lldb/Host/common/UDPSocket.h"
|
|
#include "llvm/Support/FileSystem.h"
|
|
#include "llvm/Support/Path.h"
|
|
#include "llvm/Testing/Support/Error.h"
|
|
|
|
#if LLDB_ENABLE_POSIX
|
|
#include "lldb/Host/posix/DomainSocket.h"
|
|
#endif
|
|
|
|
namespace lldb_private {
|
|
template <typename SocketType>
|
|
void CreateConnectedSockets(
|
|
llvm::StringRef listen_remote_address,
|
|
const std::function<std::string(const SocketType &)> &get_connect_addr,
|
|
std::unique_ptr<SocketType> *a_up, std::unique_ptr<SocketType> *b_up);
|
|
bool CreateTCPConnectedSockets(std::string listen_remote_ip,
|
|
std::unique_ptr<TCPSocket> *a_up,
|
|
std::unique_ptr<TCPSocket> *b_up);
|
|
#if LLDB_ENABLE_POSIX
|
|
void CreateDomainConnectedSockets(llvm::StringRef path,
|
|
std::unique_ptr<DomainSocket> *a_up,
|
|
std::unique_ptr<DomainSocket> *b_up);
|
|
#endif
|
|
|
|
bool HostSupportsIPv6();
|
|
bool HostSupportsIPv4();
|
|
} // namespace lldb_private
|
|
|
|
#endif
|