4bc39bb46ca908fb5075f6042f2aad6281169f4a galt Tue Apr 12 11:57:55 2011 -0700 fixing complaint from Italy mirror that socket is already connected. diff --git src/lib/net.c src/lib/net.c index 1149afa..3e00091 100644 --- src/lib/net.c +++ src/lib/net.c @@ -86,35 +86,44 @@ FD_ZERO(&mySet); FD_SET(sd, &mySet); res = select(sd+1, NULL, &mySet, &mySet, &lTime); if (res < 0) { if (errno != EINTR) { warn("Error in select() during TCP non-blocking connect %d - %s\n", errno, strerror(errno)); close(sd); return -1; } } else if (res > 0) { // Socket selected for write when it is ready - // We simply re-do the connect call and get the result - res = connect(sd, (struct sockaddr*) &sai, sizeof(sai)); - if (res < 0) + int valOpt; + socklen_t lon; + // But check the socket for any errors + lon = sizeof(valOpt); + if (getsockopt(sd, SOL_SOCKET, SO_ERROR, (void*) (&valOpt), &lon) < 0) + { + warn("Error in getsockopt() %d - %s\n", errno, strerror(errno)); + close(sd); + return -1; + } + // Check the value returned... + if (valOpt) { - warn("Error in TCP non-blocking connect() %d - %s\n", errno, strerror(errno)); + warn("Error in TCP non-blocking connect() %d - %s\n", valOpt, strerror(valOpt)); close(sd); return -1; } break; } else { warn("TCP non-blocking connect() timed-out in select() after %ld milliseconds - Cancelling!\n", msTimeout); close(sd); return -1; } } } else {