From 541af5236e69bcc86c6f993d09358173596483a7 Mon Sep 17 00:00:00 2001
From: Florent Le Coz <louiz@louiz.org>
Date: Sat, 22 Feb 2014 23:36:03 +0100
Subject: Consider that the connect() succeded if errno EISCONN

Apparently on some systems, subsquent connect() calls may fail with EISCONN
error, to indicate that the connection succeded in the background, instead
of returning 0.
---
 src/network/socket_handler.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'src/network')

diff --git a/src/network/socket_handler.cpp b/src/network/socket_handler.cpp
index ee21bca..ca9d9e2 100644
--- a/src/network/socket_handler.cpp
+++ b/src/network/socket_handler.cpp
@@ -97,7 +97,8 @@ void SocketHandler::connect(const std::string& address, const std::string& port)
 
   for (struct addrinfo* rp = addr_res; rp; rp = rp->ai_next)
     {
-      if (::connect(this->socket, rp->ai_addr, rp->ai_addrlen) == 0)
+      if (::connect(this->socket, rp->ai_addr, rp->ai_addrlen) == 0
+          || errno == EISCONN)
         {
           log_info("Connection success.");
           this->connected = true;
-- 
cgit v1.2.3