From 442a37da7343f9836e47222b5ccc2a06e7b649e6 Mon Sep 17 00:00:00 2001 From: Tom Early Date: Sat, 23 May 2020 14:27:07 -0700 Subject: [PATCH] Unix client will wait for server to start --- UnixPacketSock.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/UnixPacketSock.cpp b/UnixPacketSock.cpp index c3f1e60..5f341fa 100644 --- a/UnixPacketSock.cpp +++ b/UnixPacketSock.cpp @@ -17,6 +17,8 @@ */ #include +#include +#include #include #include #include @@ -114,10 +116,21 @@ bool CUnixPacketClient::Open(const char *name) memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; memcpy(addr.sun_path+1, name, strlen(name)); - if (-1 == connect(m_fd, (struct sockaddr *)&addr, sizeof(addr))) { - std::cerr << "Cannot connect unix client socket " << name << std::endl; - Close(); - return true; + int rval = -1; + int tries = 0; + while (rval < 0) { + rval = connect(m_fd, (struct sockaddr *)&addr, sizeof(addr)); + if (rval < 0) { + if (ECONNREFUSED == errno) { + if (0 == tries++ % 20) + std::cout << "Waiting for " << name << " server to start..." << std::endl; + std::this_thread::sleep_for(std::chrono::milliseconds(250)); + } else { + std::cerr << "Cannot connect unix client socket " << name << std::endl; + Close(); + return true; + } + } } return false;