diff --git a/panda/src/net/connectionManager.cxx b/panda/src/net/connectionManager.cxx index 5559514928..6a8257d245 100644 --- a/panda/src/net/connectionManager.cxx +++ b/panda/src/net/connectionManager.cxx @@ -147,8 +147,8 @@ PT(Connection) ConnectionManager:: open_TCP_client_connection(const NetAddress &address, int timeout_ms) { Socket_TCP *socket = new Socket_TCP; -#if defined(HAVE_THREADS) && defined(SIMPLE_THREADS) - // In the simple-threads case, use a non-blocking connect. + // We always open the connection with non-blocking mode first, so we + // can implement the timeout. bool okflag = socket->ActiveOpenNonBlocking(address.get_addr()); if (okflag && socket->GetLastError() == LOCAL_CONNECT_BLOCKING) { // Now wait for the socket to connect. @@ -171,12 +171,6 @@ open_TCP_client_connection(const NetAddress &address, int timeout_ms) { } } -#else - // In the normal case, we can just do a blocking connect. - bool okflag = socket->ActiveOpen(address.get_addr(), false); - -#endif // SIMPLE_THREADS - if (!okflag) { net_cat.error() << "Unable to open TCP connection to server " @@ -185,6 +179,14 @@ open_TCP_client_connection(const NetAddress &address, int timeout_ms) { return PT(Connection)(); } +#if !defined(HAVE_THREADS) || !defined(SIMPLE_THREADS) + // Now we have opened the socket in nonblocking mode. Unless we're + // using SIMPLE_THREADS, though, we really want the socket in + // blocking mode (since that's what we support here). Change it. + socket->SetBlocking(); + +#endif // SIMPLE_THREADS + net_cat.info() << "Opened TCP connection to server " << address.get_ip_string() << " " << " on port " << address.get_port() << "\n";