65 lines
2.5 KiB
Diff
65 lines
2.5 KiB
Diff
|
From 9df652778fc92db9eb371c78bc7d1691417f3a60 Mon Sep 17 00:00:00 2001
|
||
|
From: Rafik Zurob <rzurob@ca.ibm.com>
|
||
|
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<StringError>("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<sockaddr *>(&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<sockaddr *>(&ServAddr),
|
||
|
+ sizeof(ServAddr));
|
||
|
+ if (ConnectRC == 0)
|
||
|
+ break;
|
||
|
+ }
|
||
|
+ freeaddrinfo(AI);
|
||
|
+ if (ConnectRC == -1)
|
||
|
return make_error<StringError>("Failed to connect to " + HostName + ":" +
|
||
|
Twine(Port),
|
||
|
inconvertibleErrorCode());
|
||
|
--
|
||
|
1.8.3.1
|
||
|
|