From 85d94017c702c48fc9dc27cddf86eda2b3906dc4 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 26 Nov 2024 20:32:57 +0300 Subject: [PATCH] catch EINPROGRESS and WSAEWOULDBLOCK --- src/network/Network.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/network/Network.cpp b/src/network/Network.cpp index 5af67a71..fb80750f 100644 --- a/src/network/Network.cpp +++ b/src/network/Network.cpp @@ -19,10 +19,14 @@ #include #include #include +#include using SOCKET = int; #endif // _WIN32 +#include +#include + #include "debug/Logger.hpp" #include "util/stringutil.hpp" @@ -361,11 +365,24 @@ public: int res = connectsocket(descriptor, addrinfo->ai_addr, addrinfo->ai_addrlen); if (res == -1) { - auto error = handle_socket_error("Connect failed"); - closesocket(descriptor); - freeaddrinfo(addrinfo); - throw error; +# ifdef _WIN32 + if (WSAGetLastError() != WSAEWOULDBLOCK) { + auto error = handle_socket_error("Connect failed"); + closesocket(descriptor); + freeaddrinfo(addrinfo); + throw error; + } +# else + if (errno != EINPROGRESS) { + auto error = handle_socket_error("Connect failed"); + closesocket(descriptor); + freeaddrinfo(addrinfo); + throw error; + } +# endif } + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + logger.info() << "connected to " << address << " [" << to_string(addrinfo) << ":" << port << "]"; return std::make_shared(descriptor, addrinfo);