From 2e1b34b7e55544a4d2ea36643906ba60dc6f312d Mon Sep 17 00:00:00 2001 From: Marco Eichelberg Date: Wed, 18 Dec 2024 17:44:25 +0100 Subject: [PATCH] Properly handle unknown "localhost" in DVPSIPCClient. The request to resolve the hostname "localhost" to an IPv4 address may fail under certain circumstances (e.g. in a IPv6 only environment). This situation is now handled properly. Thanks to Oliver Klerx for the bug report and patch. --- dcmpstat/libsrc/dvpsmsg.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dcmpstat/libsrc/dvpsmsg.cc b/dcmpstat/libsrc/dvpsmsg.cc index 743c023b08..ac0da5ad04 100644 --- a/dcmpstat/libsrc/dvpsmsg.cc +++ b/dcmpstat/libsrc/dvpsmsg.cc @@ -279,6 +279,10 @@ void DVPSIPCClient::requestConnection() { if (connection) return; // connection already open + OFSockAddr server; + OFStandard::getAddressByHostname("localhost", AF_INET, server); + if (server.size() == 0) return; + #ifdef _WIN32 SOCKET s = socket(AF_INET, SOCK_STREAM, 0); if (s == INVALID_SOCKET) return; @@ -286,8 +290,7 @@ void DVPSIPCClient::requestConnection() int s = socket(AF_INET, SOCK_STREAM, 0); if (s < 0) return; #endif - OFSockAddr server; - OFStandard::getAddressByHostname("localhost", AF_INET, server); + server.setPort(OFstatic_cast(unsigned short, htons(OFstatic_cast(unsigned short, port)))); if (connect(s, server.getSockaddr(), server.size()) < 0)