From 9df652778fc92db9eb371c78bc7d1691417f3a60 Mon Sep 17 00:00:00 2001 From: Rafik Zurob Date: Fri, 22 Jan 2021 06:51:19 -0600 Subject: [PATCH] [llvm-jitlink] Replace use of deprecated gethostbyname by getaddrinfo. This patch replaces use of deprecated gethostbyname by getaddrinfo. Author: Rafik Zurob Reviewed By: lhames Differential Revision: https://reviews.llvm.org/D95477 --- llvm/tools/llvm-jitlink/llvm-jitlink.cpp | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp index da4a164..108dd61 100644 --- a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp +++ b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp @@ -690,15 +690,35 @@ LLVMJITLinkRemoteTargetProcessControl::ConnectToExecutor() { " is not a valid integer", inconvertibleErrorCode()); + addrinfo *AI; + addrinfo Hints{}; + Hints.ai_family = AF_INET; + Hints.ai_socktype = SOCK_STREAM; + Hints.ai_protocol = PF_INET; + Hints.ai_flags = AI_NUMERICSERV; + if (getaddrinfo(HostName.c_str(), PortStr.str().c_str(), &Hints, &AI) != 0) + return make_error("Failed to resolve " + HostName + ":" + + Twine(Port), + inconvertibleErrorCode()); + int SockFD = socket(PF_INET, SOCK_STREAM, 0); - hostent *Server = gethostbyname(HostName.c_str()); sockaddr_in ServAddr; memset(&ServAddr, 0, sizeof(ServAddr)); ServAddr.sin_family = PF_INET; - memmove(&Server->h_addr, &ServAddr.sin_addr.s_addr, Server->h_length); ServAddr.sin_port = htons(Port); - if (connect(SockFD, reinterpret_cast(&ServAddr), - sizeof(ServAddr)) < 0) + + // getaddrinfo returns a list of address structures. Go through the list + // to find one we can connect to. + int ConnectRC = -1; + for (addrinfo *Server = AI; Server; Server = Server->ai_next) { + memmove(&Server->ai_addr, &ServAddr.sin_addr.s_addr, Server->ai_addrlen); + ConnectRC = connect(SockFD, reinterpret_cast(&ServAddr), + sizeof(ServAddr)); + if (ConnectRC == 0) + break; + } + freeaddrinfo(AI); + if (ConnectRC == -1) return make_error("Failed to connect to " + HostName + ":" + Twine(Port), inconvertibleErrorCode()); -- 1.8.3.1