Commit aba5888f authored by Peter Wu's avatar Peter Wu Committed by Daniel Stenberg
Browse files

lib/connect: restrict IP/TCP options to said sockets



This patch prepares for adding UNIX domain sockets support.

TCP_NODELAY and TCP_KEEPALIVE are specific to TCP/IP sockets, so do not
apply these to other socket types. bindlocal only works for IP sockets
(independent of TCP/UDP), so filter that out too for other types.

Signed-off-by: default avatarPeter Wu <peter@lekensteyn.nl>
parent 397a634e
Loading
Loading
Loading
Loading
+15 −11
Original line number Diff line number Diff line
@@ -991,6 +991,7 @@ static CURLcode singleipconnect(struct connectdata *conn,
  CURLcode result;
  char ipaddress[MAX_IPADR_LEN];
  long port;
  bool is_tcp;

  *sockp = CURL_SOCKET_BAD;

@@ -1013,14 +1014,16 @@ static CURLcode singleipconnect(struct connectdata *conn,
  }
  infof(data, "  Trying %s...\n", ipaddress);

  if(data->set.tcp_nodelay)
  is_tcp = (addr.family == AF_INET || addr.family == AF_INET6) &&
           addr.socktype == SOCK_STREAM;
  if(is_tcp && data->set.tcp_nodelay)
    tcpnodelay(conn, sockfd);

  nosigpipe(conn, sockfd);

  Curl_sndbufset(sockfd);

  if(data->set.tcp_keepalive)
  if(is_tcp && data->set.tcp_keepalive)
    tcpkeepalive(data, sockfd);

  if(data->set.fsockopt) {
@@ -1038,6 +1041,7 @@ static CURLcode singleipconnect(struct connectdata *conn,
  }

  /* possibly bind the local end to an IP, interface or port */
  if(addr.family == AF_INET || addr.family == AF_INET6) {
    result = bindlocal(conn, sockfd, addr.family);
    if(result) {
      Curl_closesocket(conn, sockfd); /* close socket and bail out */
@@ -1046,9 +1050,9 @@ static CURLcode singleipconnect(struct connectdata *conn,
           We can continue trying addresses */
        return CURLE_OK;
      }

      return result;
    }
  }

  /* set socket non-blocking */
  (void)curlx_nonblock(sockfd, TRUE);