diff options
Diffstat (limited to 'lib/connect.c')
-rw-r--r-- | lib/connect.c | 49 |
1 files changed, 28 insertions, 21 deletions
diff --git a/lib/connect.c b/lib/connect.c index d61b0374e..c00a14312 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -109,8 +109,8 @@ tcpkeepalive(struct Curl_easy *data, int optval = data->set.tcp_keepalive?1:0; /* only set IDLE and INTVL if setting KEEPALIVE is successful */ - if(setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, - (void *)&optval, sizeof(optval)) < 0) { + if(curl_setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, + (void *)&optval, sizeof(optval)) < 0) { infof(data, "Failed to set SO_KEEPALIVE on fd %d", sockfd); } else { @@ -133,16 +133,16 @@ tcpkeepalive(struct Curl_easy *data, #ifdef TCP_KEEPIDLE optval = curlx_sltosi(data->set.tcp_keepidle); KEEPALIVE_FACTOR(optval); - if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE, - (void *)&optval, sizeof(optval)) < 0) { + if(curl_setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE, + (void *)&optval, sizeof(optval)) < 0) { infof(data, "Failed to set TCP_KEEPIDLE on fd %d", sockfd); } #endif #ifdef TCP_KEEPINTVL optval = curlx_sltosi(data->set.tcp_keepintvl); KEEPALIVE_FACTOR(optval); - if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPINTVL, - (void *)&optval, sizeof(optval)) < 0) { + if(curl_setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPINTVL, + (void *)&optval, sizeof(optval)) < 0) { infof(data, "Failed to set TCP_KEEPINTVL on fd %d", sockfd); } #endif @@ -240,7 +240,8 @@ static CURLcode bindlocal(struct Curl_easy *data, { struct connectdata *conn = data->conn; struct Curl_sockaddr_storage sa; - struct sockaddr *sock = (struct sockaddr *)&sa; /* bind to this address */ + struct curl_struct_sockaddr *sock = + (struct curl_struct_sockaddr *)&sa; /* bind to this address */ curl_socklen_t sizeof_sa = 0; /* size of the data sock points to */ struct sockaddr_in *si4 = (struct sockaddr_in *)&sa; #ifdef ENABLE_IPV6 @@ -302,8 +303,8 @@ static CURLcode bindlocal(struct Curl_easy *data, * converted to an IP address and would fail Curl_if2ip. Simply try * to use it straight away. */ - if(setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, - dev, (curl_socklen_t)strlen(dev) + 1) == 0) { + if(curl_setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, + dev, (curl_socklen_t)strlen(dev) + 1) == 0) { /* This is typically "errno 1, error: Operation not permitted" if * you're not running as root or another suitable privileged * user. @@ -446,8 +447,9 @@ static CURLcode bindlocal(struct Curl_easy *data, (void)setsockopt(sockfd, SOL_IP, IP_BIND_ADDRESS_NO_PORT, &on, sizeof(on)); #endif for(;;) { - if(bind(sockfd, sock, sizeof_sa) >= 0) { + if(curl_bind(sockfd, sock, sizeof_sa) >= 0) { /* we succeeded to bind */ +#ifdef HAVE_GETSOCKNAME struct Curl_sockaddr_storage add; curl_socklen_t size = sizeof(add); memset(&add, 0, sizeof(struct Curl_sockaddr_storage)); @@ -462,7 +464,7 @@ static CURLcode bindlocal(struct Curl_easy *data, conn->bits.bound = TRUE; return CURLE_OK; } - +#endif if(--portnum > 0) { infof(data, "Bind to local port %hu failed, trying next", port); port++; /* try next port */ @@ -487,6 +489,7 @@ static CURLcode bindlocal(struct Curl_easy *data, return CURLE_INTERFACE_FAILED; } +#ifdef HAVE_GETSOCKOPT /* * verifyconnect() returns TRUE if the connect really has happened. */ @@ -553,6 +556,10 @@ static bool verifyconnect(curl_socket_t sockfd, int *error) #endif return rc; } +#else +#define verifyconnect(x,y) TRUE +#endif + /* update tempaddr[tempindex] (to the next entry), makes sure to stick to the correct family */ @@ -1069,8 +1076,8 @@ static void tcpnodelay(struct Curl_easy *data, curl_socket_t sockfd) (void) data; #endif - if(setsockopt(sockfd, level, TCP_NODELAY, (void *)&onoff, - sizeof(onoff)) < 0) + if(curl_setsockopt(sockfd, level, TCP_NODELAY, (void *)&onoff, + sizeof(onoff)) < 0) infof(data, "Could not set TCP_NODELAY: %s", Curl_strerror(SOCKERRNO, buffer, sizeof(buffer))); #else @@ -1271,18 +1278,18 @@ static CURLcode singleipconnect(struct Curl_easy *data, NULL, 0, NULL, NULL); } else { - rc = connect(sockfd, &addr.sa_addr, addr.addrlen); + rc = curl_connect(sockfd, &addr.sa_addr, addr.addrlen); } # else - rc = connect(sockfd, &addr.sa_addr, addr.addrlen); + rc = curl_connect(sockfd, &addr.sa_addr, addr.addrlen); # endif /* HAVE_BUILTIN_AVAILABLE */ -#elif defined(TCP_FASTOPEN_CONNECT) /* Linux >= 4.11 */ +#elif defined(HAVE_TCP_FASTOPEN_CONNECT) /* Linux >= 4.11 */ if(setsockopt(sockfd, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, (void *)&optval, sizeof(optval)) < 0) infof(data, "Failed to enable TCP Fast Open on fd %d", sockfd); rc = connect(sockfd, &addr.sa_addr, addr.addrlen); -#elif defined(MSG_FASTOPEN) /* old Linux */ +#elif defined(HAVE_MSG_FASTOPEN) /* old Linux */ if(conn->given->flags & PROTOPT_SSL) rc = connect(sockfd, &addr.sa_addr, addr.addrlen); else @@ -1290,7 +1297,7 @@ static CURLcode singleipconnect(struct Curl_easy *data, #endif } else { - rc = connect(sockfd, &addr.sa_addr, addr.addrlen); + rc = curl_connect(sockfd, &addr.sa_addr, addr.addrlen); } if(-1 == rc) @@ -1499,8 +1506,8 @@ bool Curl_connalive(struct connectdata *conn) else { /* use the socket */ char buf; - if(recv((RECV_TYPE_ARG1)conn->sock[FIRSTSOCKET], (RECV_TYPE_ARG2)&buf, - (RECV_TYPE_ARG3)1, (RECV_TYPE_ARG4)MSG_PEEK) == 0) { + if(curl_recv((RECV_TYPE_ARG1)conn->sock[FIRSTSOCKET], (RECV_TYPE_ARG2)&buf, + (RECV_TYPE_ARG3)1, (RECV_TYPE_ARG4)MSG_PEEK) == 0) { return false; /* FIN received */ } } @@ -1598,7 +1605,7 @@ CURLcode Curl_socket(struct Curl_easy *data, } else /* opensocket callback not set, so simply create the socket now */ - *sockfd = socket(addr->family, addr->socktype, addr->protocol); + *sockfd = curl_socket(addr->family, addr->socktype, addr->protocol); if(*sockfd == CURL_SOCKET_BAD) /* no socket, no connection */ |