select: switch to macros in uppercase

Curl_select_ready() was the former API that was replaced with
Curl_select_check() a while back and the former arg setup was provided
with a define (in order to leave existing code unmodified).

Now we instead offer SOCKET_READABLE and SOCKET_WRITABLE for the most
common shortcuts where only one socket is checked. They're also more
visibly macros.
This commit is contained in:
Daniel Stenberg 2016-10-18 10:58:58 +02:00
parent a05906190c
commit 8a6e89a9eb
22 changed files with 50 additions and 46 deletions

View file

@ -762,7 +762,7 @@ CURLcode Curl_is_connected(struct connectdata *conn,
#endif #endif
/* check socket for connect */ /* check socket for connect */
rc = Curl_socket_ready(CURL_SOCKET_BAD, conn->tempsock[i], 0); rc = SOCKET_WRITABLE(conn->tempsock[i], 0);
if(rc == 0) { /* no connection yet */ if(rc == 0) { /* no connection yet */
error = 0; error = 0;

View file

@ -741,7 +741,7 @@ CURLcode Curl_GetFTPResponse(ssize_t *nreadp, /* return number of bytes read */
*/ */
} }
else { else {
switch (Curl_socket_ready(sockfd, CURL_SOCKET_BAD, interval_ms)) { switch (SOCKET_READABLE(sockfd, interval_ms)) {
case -1: /* select() error, stop reading */ case -1: /* select() error, stop reading */
failf(data, "FTP response aborted due to select/poll error: %d", failf(data, "FTP response aborted due to select/poll error: %d",
SOCKERRNO); SOCKERRNO);
@ -3165,7 +3165,7 @@ static CURLcode ftp_multi_statemach(struct connectdata *conn,
struct ftp_conn *ftpc = &conn->proto.ftpc; struct ftp_conn *ftpc = &conn->proto.ftpc;
CURLcode result = Curl_pp_statemach(&ftpc->pp, FALSE); CURLcode result = Curl_pp_statemach(&ftpc->pp, FALSE);
/* Check for the state outside of the Curl_socket_ready() return code checks /* Check for the state outside of the Curl_socket_check() return code checks
since at times we are in fact already in this state when this function since at times we are in fact already in this state when this function
gets called. */ gets called. */
*done = (ftpc->state == FTP_STOP) ? TRUE : FALSE; *done = (ftpc->state == FTP_STOP) ? TRUE : FALSE;

View file

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -144,7 +144,7 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
Wait a while for the socket to be writable. Note that this doesn't Wait a while for the socket to be writable. Note that this doesn't
acknowledge the timeout. acknowledge the timeout.
*/ */
Curl_socket_ready(CURL_SOCKET_BAD, sockfd, 100); SOCKET_WRITABLE(sockfd, 100);
} }
free(sel_org); free(sel_org);

View file

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -245,7 +245,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
} }
if(!blocking) { if(!blocking) {
if(0 == Curl_socket_ready(tunnelsocket, CURL_SOCKET_BAD, 0)) if(0 == SOCKET_READABLE(tunnelsocket, 0))
/* return so we'll be called again polling-style */ /* return so we'll be called again polling-style */
return CURLE_OK; return CURLE_OK;
else { else {
@ -280,8 +280,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
} }
/* loop every second at least, less if the timeout is near */ /* loop every second at least, less if the timeout is near */
switch (Curl_socket_ready(tunnelsocket, CURL_SOCKET_BAD, switch (SOCKET_READABLE(tunnelsocket, check<1000L?check:1000)) {
check<1000L?check:1000)) {
case -1: /* select() error, stop reading */ case -1: /* select() error, stop reading */
error = SELECT_ERROR; error = SELECT_ERROR;
failf(data, "Proxy CONNECT aborted due to select/poll error"); failf(data, "Proxy CONNECT aborted due to select/poll error");

View file

@ -108,7 +108,8 @@ CURLcode Curl_pp_statemach(struct pingpong *pp, bool block)
/* We are receiving and there is data ready in the SSL library */ /* We are receiving and there is data ready in the SSL library */
rc = 1; rc = 1;
else else
rc = Curl_socket_ready(pp->sendleft?CURL_SOCKET_BAD:sock, /* reading */ rc = Curl_socket_check(pp->sendleft?CURL_SOCKET_BAD:sock, /* reading */
CURL_SOCKET_BAD,
pp->sendleft?sock:CURL_SOCKET_BAD, /* writing */ pp->sendleft?sock:CURL_SOCKET_BAD, /* writing */
interval_ms); interval_ms);

View file

@ -147,7 +147,7 @@ bool Curl_rtsp_connisdead(struct connectdata *check)
int sval; int sval;
bool ret_val = TRUE; bool ret_val = TRUE;
sval = Curl_socket_ready(check->sock[FIRSTSOCKET], CURL_SOCKET_BAD, 0); sval = SOCKET_READABLE(check->sock[FIRSTSOCKET], 0);
if(sval == 0) { if(sval == 0) {
/* timeout */ /* timeout */
ret_val = FALSE; ret_val = FALSE;

View file

@ -58,7 +58,7 @@ int Curl_ack_eintr = 0;
/* /*
* Internal function used for waiting a specific amount of ms * Internal function used for waiting a specific amount of ms
* in Curl_socket_ready() and Curl_poll() when no file descriptor * in Curl_socket_check() and Curl_poll() when no file descriptor
* is provided to wait on, just being used to delay execution. * is provided to wait on, just being used to delay execution.
* WinSock select() and poll() timeout mechanisms need a valid * WinSock select() and poll() timeout mechanisms need a valid
* socket descriptor in a not null file descriptor set to work. * socket descriptor in a not null file descriptor set to work.

View file

@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -75,9 +75,10 @@ int Curl_socket_check(curl_socket_t readfd, curl_socket_t readfd2,
curl_socket_t writefd, curl_socket_t writefd,
long timeout_ms); long timeout_ms);
/* provide the former API internally */ #define SOCKET_READABLE(x,z) \
#define Curl_socket_ready(x,y,z) \ Curl_socket_check(x, CURL_SOCKET_BAD, CURL_SOCKET_BAD, z)
Curl_socket_check(x, CURL_SOCKET_BAD, y, z) #define SOCKET_WRITABLE(x,z) \
Curl_socket_check(CURL_SOCKET_BAD, CURL_SOCKET_BAD, x, z)
int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms); int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms);

View file

@ -67,7 +67,7 @@ int Curl_blockread_all(struct connectdata *conn, /* connection data */
result = CURLE_OPERATION_TIMEDOUT; result = CURLE_OPERATION_TIMEDOUT;
break; break;
} }
if(Curl_socket_ready(sockfd, CURL_SOCKET_BAD, timeleft) <= 0) { if(SOCKET_READABLE(sockfd, timeleft) <= 0) {
result = ~CURLE_OK; result = ~CURLE_OK;
break; break;
} }
@ -401,7 +401,7 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
(void)curlx_nonblock(sock, TRUE); (void)curlx_nonblock(sock, TRUE);
/* wait until socket gets connected */ /* wait until socket gets connected */
result = Curl_socket_ready(CURL_SOCKET_BAD, sock, timeout); result = SOCKET_WRITABLE(sock, timeout);
if(-1 == result) { if(-1 == result) {
failf(conn->data, "SOCKS5: no connection here"); failf(conn->data, "SOCKS5: no connection here");
@ -442,7 +442,7 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
(void)curlx_nonblock(sock, TRUE); (void)curlx_nonblock(sock, TRUE);
result = Curl_socket_ready(sock, CURL_SOCKET_BAD, timeout); result = SOCKET_READABLE(sock, timeout);
if(-1 == result) { if(-1 == result) {
failf(conn->data, "SOCKS5 nothing to read"); failf(conn->data, "SOCKS5 nothing to read");

View file

@ -2860,7 +2860,7 @@ static CURLcode ssh_block_statemach(struct connectdata *conn,
if(LIBSSH2_SESSION_BLOCK_OUTBOUND & dir) if(LIBSSH2_SESSION_BLOCK_OUTBOUND & dir)
fd_write = sock; fd_write = sock;
/* wait for the socket to become ready */ /* wait for the socket to become ready */
Curl_socket_ready(fd_read, fd_write, Curl_socket_check(fd_read, CURL_SOCKET_BAD, fd_write,
left>1000?1000:left); /* ignore result */ left>1000?1000:left); /* ignore result */
} }
#endif #endif

View file

@ -1233,7 +1233,7 @@ static CURLcode tftp_multi_statemach(struct connectdata *conn, bool *done)
} }
else { else {
/* no timeouts to handle, check our socket */ /* no timeouts to handle, check our socket */
rc = Curl_socket_ready(state->sockfd, CURL_SOCKET_BAD, 0); rc = SOCKET_READABLE(state->sockfd, 0);
if(rc == -1) { if(rc == -1) {
/* bail out */ /* bail out */

View file

@ -1089,7 +1089,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
if(!select_res) /* Call for select()/poll() only, if read/write/error if(!select_res) /* Call for select()/poll() only, if read/write/error
status is not known. */ status is not known. */
select_res = Curl_socket_ready(fd_read, fd_write, 0); select_res = Curl_socket_check(fd_read, CURL_SOCKET_BAD, fd_write, 0);
if(select_res == CURL_CSELECT_ERR) { if(select_res == CURL_CSELECT_ERR) {
failf(data, "select/poll returned error"); failf(data, "select/poll returned error");

View file

@ -2892,7 +2892,7 @@ static bool SocketIsDead(curl_socket_t sock)
int sval; int sval;
bool ret_val = TRUE; bool ret_val = TRUE;
sval = Curl_socket_ready(sock, CURL_SOCKET_BAD, 0); sval = SOCKET_READABLE(sock, 0);
if(sval == 0) if(sval == 0)
/* timeout */ /* timeout */
ret_val = FALSE; ret_val = FALSE;

View file

@ -579,8 +579,7 @@ int Curl_axtls_shutdown(struct connectdata *conn, int sockindex)
*/ */
if(connssl->ssl) { if(connssl->ssl) {
int what = Curl_socket_ready(conn->sock[sockindex], int what = SOCKET_READABLE(conn->sock[sockindex], SSL_SHUTDOWN_TIMEOUT);
CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT);
if(what > 0) { if(what > 0) {
/* Something to read, let's do it and hope that it is the close /* Something to read, let's do it and hope that it is the close
notify alert from the server. buf is managed internally by notify alert from the server. buf is managed internally by

View file

@ -803,7 +803,8 @@ cyassl_connect_common(struct connectdata *conn,
curl_socket_t readfd = ssl_connect_2_reading== curl_socket_t readfd = ssl_connect_2_reading==
connssl->connecting_state?sockfd:CURL_SOCKET_BAD; connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
what = Curl_socket_ready(readfd, writefd, nonblocking?0:timeout_ms); what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
nonblocking?0:timeout_ms);
if(what < 0) { if(what < 0) {
/* fatal error */ /* fatal error */
failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO); failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);

View file

@ -6,7 +6,7 @@
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 2012 - 2014, Nick Zitzmann, <nickzman@gmail.com>. * Copyright (C) 2012 - 2014, Nick Zitzmann, <nickzman@gmail.com>.
* Copyright (C) 2012 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 2012 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -2150,7 +2150,8 @@ darwinssl_connect_common(struct connectdata *conn,
curl_socket_t readfd = ssl_connect_2_reading == curl_socket_t readfd = ssl_connect_2_reading ==
connssl->connecting_state?sockfd:CURL_SOCKET_BAD; connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
what = Curl_socket_ready(readfd, writefd, nonblocking?0:timeout_ms); what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
nonblocking?0:timeout_ms);
if(what < 0) { if(what < 0) {
/* fatal error */ /* fatal error */
failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO); failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
@ -2272,8 +2273,7 @@ int Curl_darwinssl_shutdown(struct connectdata *conn, int sockindex)
rc = 0; rc = 0;
what = Curl_socket_ready(conn->sock[sockindex], what = SOCKET_READABLE(conn->sock[sockindex], SSL_SHUTDOWN_TIMEOUT);
CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT);
for(;;) { for(;;) {
if(what < 0) { if(what < 0) {
@ -2301,7 +2301,7 @@ int Curl_darwinssl_shutdown(struct connectdata *conn, int sockindex)
if(nread <= 0) if(nread <= 0)
break; break;
what = Curl_socket_ready(conn->sock[sockindex], CURL_SOCKET_BAD, 0); what = SOCKET_READABLE(conn->sock[sockindex], 0);
} }
return rc; return rc;

View file

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -1001,8 +1001,8 @@ int Curl_gskit_shutdown(struct connectdata *conn, int sockindex)
close_one(connssl, data); close_one(connssl, data);
rc = 0; rc = 0;
what = Curl_socket_ready(conn->sock[sockindex], what = SOCKET_READABLE(conn->sock[sockindex],
CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT); SSL_SHUTDOWN_TIMEOUT);
for(;;) { for(;;) {
if(what < 0) { if(what < 0) {
@ -1031,7 +1031,7 @@ int Curl_gskit_shutdown(struct connectdata *conn, int sockindex)
if(nread <= 0) if(nread <= 0)
break; break;
what = Curl_socket_ready(conn->sock[sockindex], CURL_SOCKET_BAD, 0); what = SOCKET_READABLE(conn->sock[sockindex], 0);
} }
return rc; return rc;

View file

@ -289,7 +289,7 @@ static CURLcode handshake(struct connectdata *conn,
curl_socket_t readfd = ssl_connect_2_reading== curl_socket_t readfd = ssl_connect_2_reading==
connssl->connecting_state?sockfd:CURL_SOCKET_BAD; connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
what = Curl_socket_ready(readfd, writefd, what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
nonblocking?0: nonblocking?0:
timeout_ms?timeout_ms:1000); timeout_ms?timeout_ms:1000);
if(what < 0) { if(what < 0) {
@ -1445,8 +1445,8 @@ int Curl_gtls_shutdown(struct connectdata *conn, int sockindex)
if(conn->ssl[sockindex].session) { if(conn->ssl[sockindex].session) {
while(!done) { while(!done) {
int what = Curl_socket_ready(conn->sock[sockindex], int what = SOCKET_READABLE(conn->sock[sockindex],
CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT); SSL_SHUTDOWN_TIMEOUT);
if(what > 0) { if(what > 0) {
/* Something to read, let's do it and hope that it is the close /* Something to read, let's do it and hope that it is the close
notify alert from the server */ notify alert from the server */

View file

@ -773,7 +773,8 @@ mbed_connect_common(struct connectdata *conn,
curl_socket_t readfd = ssl_connect_2_reading== curl_socket_t readfd = ssl_connect_2_reading==
connssl->connecting_state?sockfd:CURL_SOCKET_BAD; connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
what = Curl_socket_ready(readfd, writefd, nonblocking ? 0 : timeout_ms); what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
nonblocking ? 0 : timeout_ms);
if(what < 0) { if(what < 0) {
/* fatal error */ /* fatal error */
failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO); failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);

View file

@ -965,8 +965,8 @@ int Curl_ossl_shutdown(struct connectdata *conn, int sockindex)
if(connssl->handle) { if(connssl->handle) {
buffsize = (int)sizeof(buf); buffsize = (int)sizeof(buf);
while(!done) { while(!done) {
int what = Curl_socket_ready(conn->sock[sockindex], int what = SOCKET_READABLE(conn->sock[sockindex],
CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT); SSL_SHUTDOWN_TIMEOUT);
if(what > 0) { if(what > 0) {
ERR_clear_error(); ERR_clear_error();
@ -2967,7 +2967,8 @@ static CURLcode ossl_connect_common(struct connectdata *conn,
curl_socket_t readfd = ssl_connect_2_reading== curl_socket_t readfd = ssl_connect_2_reading==
connssl->connecting_state?sockfd:CURL_SOCKET_BAD; connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
what = Curl_socket_ready(readfd, writefd, nonblocking?0:timeout_ms); what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
nonblocking?0:timeout_ms);
if(what < 0) { if(what < 0) {
/* fatal error */ /* fatal error */
failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO); failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);

View file

@ -727,7 +727,8 @@ polarssl_connect_common(struct connectdata *conn,
curl_socket_t readfd = ssl_connect_2_reading== curl_socket_t readfd = ssl_connect_2_reading==
connssl->connecting_state?sockfd:CURL_SOCKET_BAD; connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
what = Curl_socket_ready(readfd, writefd, nonblocking?0:timeout_ms); what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
nonblocking?0:timeout_ms);
if(what < 0) { if(what < 0) {
/* fatal error */ /* fatal error */
failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO); failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);

View file

@ -815,7 +815,8 @@ schannel_connect_common(struct connectdata *conn, int sockindex,
curl_socket_t readfd = ssl_connect_2_reading == curl_socket_t readfd = ssl_connect_2_reading ==
connssl->connecting_state ? sockfd : CURL_SOCKET_BAD; connssl->connecting_state ? sockfd : CURL_SOCKET_BAD;
what = Curl_socket_ready(readfd, writefd, nonblocking ? 0 : timeout_ms); what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
nonblocking ? 0 : timeout_ms);
if(what < 0) { if(what < 0) {
/* fatal error */ /* fatal error */
failf(data, "select/poll on SSL/TLS socket, errno: %d", SOCKERRNO); failf(data, "select/poll on SSL/TLS socket, errno: %d", SOCKERRNO);
@ -971,8 +972,7 @@ schannel_send(struct connectdata *conn, int sockindex,
break; break;
} }
what = Curl_socket_ready(CURL_SOCKET_BAD, conn->sock[sockindex], what = SOCKET_WRITABLE(conn->sock[sockindex], timeleft);
timeleft);
if(what < 0) { if(what < 0) {
/* fatal error */ /* fatal error */
failf(conn->data, "select/poll on SSL socket, errno: %d", SOCKERRNO); failf(conn->data, "select/poll on SSL socket, errno: %d", SOCKERRNO);