Commit 2c7a5578 authored by Steve Holme's avatar Steve Holme
Browse files

connect: Close open but unconnected socket in singleipconnect()

singleipconnect() could return the file descriptor of an open socket
even though the function returned a CURLE_COULDNT_CONNECT error code
from commit ed1662c3 and 02fbc26d.

This could cause tests 19, 704 and 1233 to fail on FreeBSD, AIX and
Solaris.
parent b56d7cda
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -562,6 +562,7 @@ static CURLcode trynextip(struct connectdata *conn,

    while(ai && ai->ai_family != family)
      ai = ai->ai_next;

    if(ai) {
      rc = singleipconnect(conn, ai, &conn->tempsock[tempindex]);
      conn->tempaddr[tempindex] = ai;
@@ -1027,8 +1028,6 @@ singleipconnect(struct connectdata *conn,
  conn->bits.ipv6 = (addr.family == AF_INET6)?TRUE:FALSE;
#endif

  *sockp = sockfd;

  if(-1 == rc) {
    switch(error) {
    case EINPROGRESS:
@@ -1042,7 +1041,8 @@ singleipconnect(struct connectdata *conn,
    case EAGAIN:
#endif
#endif
      return CURLE_OK;
      res = CURLE_OK;
      break;

    default:
      /* unknown error, fallthrough and try another address! */
@@ -1051,11 +1051,15 @@ singleipconnect(struct connectdata *conn,
      data->state.os_errno = error;

      /* connect failed */
      return CURLE_COULDNT_CONNECT;
      Curl_closesocket(conn, sockfd);
      res = CURLE_COULDNT_CONNECT;
    }
  }

  return CURLE_OK;
  if(!res)
    *sockp = sockfd;

  return res;
}

/*