pollset/getsock, increase limit to 16

Let a pollset keep up to 16 sockets, now that IP happy eyeballing
can have several connect attempts open. Make the return bits from
`getsock()` calls unsigned.

This is a stopgap, as even 16 might not be enough when there is
HTTPS eyeballing in top of IP eyeballing with many A+AAAA entries
that do not respond right away.
This commit is contained in:
Stefan Eissing 2025-08-02 15:38:12 +02:00
parent c27a2db54f
commit 317096dd97
No known key found for this signature in database
28 changed files with 153 additions and 123 deletions

View file

@ -277,7 +277,7 @@ static void async_ares_cleanup(struct Curl_easy *data)
* (using curl_multi_fdset()) wants to get our fd_set setup.
*/
int Curl_async_getsock(struct Curl_easy *data, curl_socket_t *socks)
unsigned int Curl_async_getsock(struct Curl_easy *data, curl_socket_t *socks)
{
struct async_ares_ctx *ares = &data->state.async.ares;
DEBUGASSERT(ares->channel);

View file

@ -78,14 +78,15 @@
* Returns: sockets-in-use-bitmap
*/
int Curl_ares_getsock(struct Curl_easy *data,
ares_channel channel,
curl_socket_t *socks)
unsigned int Curl_ares_getsock(struct Curl_easy *data,
ares_channel channel,
curl_socket_t *socks)
{
struct timeval maxtime = { CURL_TIMEOUT_RESOLVE, 0 };
struct timeval timebuf;
int max = ares_getsock(channel,
(ares_socket_t *)socks, MAX_SOCKSPEREASYHANDLE);
unsigned int max = ares_getsock(channel,
(ares_socket_t *)socks,
MAX_SOCKSPEREASYHANDLE);
struct timeval *timeout = ares_timeout(channel, &maxtime, &timebuf);
timediff_t milli = curlx_tvtoms(timeout);
Curl_expire(data, milli, EXPIRE_ASYNC_NAME);

View file

@ -629,10 +629,10 @@ CURLcode Curl_async_is_resolved(struct Curl_easy *data,
}
}
int Curl_async_getsock(struct Curl_easy *data, curl_socket_t *socks)
unsigned int Curl_async_getsock(struct Curl_easy *data, curl_socket_t *socks)
{
struct async_thrdd_ctx *thrdd = &data->state.async.thrdd;
int ret_val = 0;
unsigned int ret_val = 0;
#if !defined(CURL_DISABLE_SOCKETPAIR) || defined(USE_HTTPSRR_ARES)
int socketi = 0;
#else

View file

@ -78,7 +78,7 @@ CURLcode Curl_async_get_impl(struct Curl_easy *easy, void **impl);
* return bitmask indicating what file descriptors (referring to array indexes
* in the 'sock' array) to wait for, read/write.
*/
int Curl_async_getsock(struct Curl_easy *data, curl_socket_t *sock);
unsigned int Curl_async_getsock(struct Curl_easy *data, curl_socket_t *sock);
/*
* Curl_async_is_resolved()
@ -127,9 +127,9 @@ struct Curl_addrinfo *Curl_async_getaddrinfo(struct Curl_easy *data,
/* common functions for c-ares and threaded resolver with HTTPSRR */
#include <ares.h>
int Curl_ares_getsock(struct Curl_easy *data,
ares_channel channel,
curl_socket_t *socks);
unsigned int Curl_ares_getsock(struct Curl_easy *data,
ares_channel channel,
curl_socket_t *socks);
int Curl_ares_perform(ares_channel channel,
timediff_t timeout_ms);
#endif

View file

@ -1175,10 +1175,10 @@ void Curl_pollset_set(struct Curl_easy *data,
}
static void ps_add(struct Curl_easy *data, struct easy_pollset *ps,
int bitmap, curl_socket_t *socks)
unsigned int bitmap, curl_socket_t *socks)
{
if(bitmap) {
int i;
unsigned int i;
for(i = 0; i < MAX_SOCKSPEREASYHANDLE; ++i) {
if(!(bitmap & GETSOCK_MASK_RW(i)) || !VALID_SOCK((socks[i]))) {
break;
@ -1198,13 +1198,13 @@ static void ps_add(struct Curl_easy *data, struct easy_pollset *ps,
void Curl_pollset_add_socks(struct Curl_easy *data,
struct easy_pollset *ps,
int (*get_socks_cb)(struct Curl_easy *data,
curl_socket_t *socks))
unsigned int (*socks_cb)(struct Curl_easy *data,
curl_socket_t *socks))
{
curl_socket_t socks[MAX_SOCKSPEREASYHANDLE];
int bitmap;
unsigned int bitmap;
bitmap = get_socks_cb(data, socks);
bitmap = socks_cb(data, socks);
ps_add(data, ps, bitmap, socks);
}

View file

@ -664,8 +664,8 @@ void Curl_pollset_set(struct Curl_easy *data,
void Curl_pollset_add_socks(struct Curl_easy *data,
struct easy_pollset *ps,
int (*get_socks_cb)(struct Curl_easy *data,
curl_socket_t *socks));
unsigned int (*socks_cb)(struct Curl_easy *data,
curl_socket_t *socks));
/**
* Check if the pollset, as is, wants to read and/or write regarding

View file

@ -214,10 +214,12 @@ static CURLcode ftp_disconnect(struct Curl_easy *data,
struct connectdata *conn, bool dead_connection);
static CURLcode ftp_do_more(struct Curl_easy *data, int *completed);
static CURLcode ftp_multi_statemach(struct Curl_easy *data, bool *done);
static int ftp_getsock(struct Curl_easy *data, struct connectdata *conn,
curl_socket_t *socks);
static int ftp_domore_getsock(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks);
static unsigned int ftp_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks);
static unsigned int ftp_domore_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks);
static CURLcode ftp_doing(struct Curl_easy *data,
bool *dophase_done);
static CURLcode ftp_setup_connection(struct Curl_easy *data,
@ -781,17 +783,18 @@ static CURLcode ftp_state_pwd(struct Curl_easy *data,
}
/* For the FTP "protocol connect" and "doing" phases only */
static int ftp_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks)
static unsigned int ftp_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks)
{
struct ftp_conn *ftpc = Curl_conn_meta_get(conn, CURL_META_FTP_CONN);
return ftpc ? Curl_pp_getsock(data, &ftpc->pp, socks) : GETSOCK_BLANK;
}
/* For the FTP "DO_MORE" phase only */
static int ftp_domore_getsock(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks)
static unsigned int ftp_domore_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks)
{
struct ftp_conn *ftpc = Curl_conn_meta_get(conn, CURL_META_FTP_CONN);
(void)data;

View file

@ -1523,8 +1523,8 @@ CURLcode Curl_resolv_check(struct Curl_easy *data,
}
#endif
int Curl_resolv_getsock(struct Curl_easy *data,
curl_socket_t *socks)
unsigned int Curl_resolv_getsock(struct Curl_easy *data,
curl_socket_t *socks)
{
#ifdef CURLRES_ASYNCH
#ifndef CURL_DISABLE_DOH

View file

@ -199,8 +199,8 @@ CURLcode Curl_resolv_check(struct Curl_easy *data,
#else
#define Curl_resolv_check(x,y) CURLE_NOT_BUILT_IN
#endif
int Curl_resolv_getsock(struct Curl_easy *data,
curl_socket_t *socks);
unsigned int Curl_resolv_getsock(struct Curl_easy *data,
curl_socket_t *socks);
CURLcode Curl_resolver_error(struct Curl_easy *data);

View file

@ -1524,9 +1524,9 @@ CURLcode Curl_http_connect(struct Curl_easy *data, bool *done)
/* this returns the socket to wait for in the DO and DOING state for the multi
interface and then we are always _sending_ a request and thus we wait for
the single socket to become writable only */
int Curl_http_getsock_do(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks)
unsigned int Curl_http_getsock_do(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks)
{
/* write mode */
(void)conn;

View file

@ -115,8 +115,9 @@ CURLcode Curl_http_setup_conn(struct Curl_easy *data,
CURLcode Curl_http(struct Curl_easy *data, bool *done);
CURLcode Curl_http_done(struct Curl_easy *data, CURLcode, bool premature);
CURLcode Curl_http_connect(struct Curl_easy *data, bool *done);
int Curl_http_getsock_do(struct Curl_easy *data, struct connectdata *conn,
curl_socket_t *socks);
unsigned int Curl_http_getsock_do(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks);
CURLcode Curl_http_write_resp(struct Curl_easy *data,
const char *buf, size_t blen,
bool is_eos);

View file

@ -157,8 +157,9 @@ static CURLcode imap_connect(struct Curl_easy *data, bool *done);
static CURLcode imap_disconnect(struct Curl_easy *data,
struct connectdata *conn, bool dead);
static CURLcode imap_multi_statemach(struct Curl_easy *data, bool *done);
static int imap_getsock(struct Curl_easy *data, struct connectdata *conn,
curl_socket_t *socks);
static unsigned int imap_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks);
static CURLcode imap_doing(struct Curl_easy *data, bool *dophase_done);
static CURLcode imap_setup_connection(struct Curl_easy *data,
struct connectdata *conn);
@ -1560,9 +1561,9 @@ static CURLcode imap_block_statemach(struct Curl_easy *data,
}
/* For the IMAP "protocol connect" and "doing" phases only */
static int imap_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks)
static unsigned int imap_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks)
{
struct imap_conn *imapc = Curl_conn_meta_get(conn, CURL_META_IMAP_CONN);
return imapc ?

View file

@ -107,8 +107,9 @@ static CURLcode mqtt_do(struct Curl_easy *data, bool *done);
static CURLcode mqtt_done(struct Curl_easy *data,
CURLcode status, bool premature);
static CURLcode mqtt_doing(struct Curl_easy *data, bool *done);
static int mqtt_getsock(struct Curl_easy *data, struct connectdata *conn,
curl_socket_t *sock);
static unsigned int mqtt_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *sock);
static CURLcode mqtt_setup_conn(struct Curl_easy *data,
struct connectdata *conn);
@ -213,9 +214,9 @@ static CURLcode mqtt_send(struct Curl_easy *data,
/* Generic function called by the multi interface to figure out what socket(s)
to wait for and for what actions during the DOING and PROTOCONNECT
states */
static int mqtt_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *sock)
static unsigned int mqtt_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *sock)
{
(void)data;
sock[0] = conn->sock[FIRSTSOCKET];

View file

@ -907,7 +907,8 @@ void Curl_attach_connection(struct Curl_easy *data,
conn->handler->attach(data, conn);
}
static int connecting_getsock(struct Curl_easy *data, curl_socket_t *socks)
static unsigned int connecting_getsock(struct Curl_easy *data,
curl_socket_t *socks)
{
struct connectdata *conn = data->conn;
curl_socket_t sockfd;
@ -923,7 +924,8 @@ static int connecting_getsock(struct Curl_easy *data, curl_socket_t *socks)
return GETSOCK_BLANK;
}
static int protocol_getsock(struct Curl_easy *data, curl_socket_t *socks)
static unsigned int protocol_getsock(struct Curl_easy *data,
curl_socket_t *socks)
{
struct connectdata *conn = data->conn;
curl_socket_t sockfd;
@ -941,7 +943,8 @@ static int protocol_getsock(struct Curl_easy *data, curl_socket_t *socks)
return GETSOCK_BLANK;
}
static int domore_getsock(struct Curl_easy *data, curl_socket_t *socks)
static unsigned int domore_getsock(struct Curl_easy *data,
curl_socket_t *socks)
{
struct connectdata *conn = data->conn;
if(!conn)
@ -956,7 +959,8 @@ static int domore_getsock(struct Curl_easy *data, curl_socket_t *socks)
return GETSOCK_BLANK;
}
static int doing_getsock(struct Curl_easy *data, curl_socket_t *socks)
static unsigned int doing_getsock(struct Curl_easy *data,
curl_socket_t *socks)
{
struct connectdata *conn = data->conn;
if(!conn)
@ -971,7 +975,8 @@ static int doing_getsock(struct Curl_easy *data, curl_socket_t *socks)
return GETSOCK_BLANK;
}
static int perform_getsock(struct Curl_easy *data, curl_socket_t *sock)
static unsigned int perform_getsock(struct Curl_easy *data,
curl_socket_t *sock)
{
struct connectdata *conn = data->conn;
if(!conn)

View file

@ -72,12 +72,6 @@ typedef enum {
MSTATE_LAST /* 18 - not a true state, never use this */
} CURLMstate;
/* we support N sockets per easy handle. Set the corresponding bit to what
action we should wait for */
#define MAX_SOCKSPEREASYHANDLE 5
#define GETSOCK_READABLE (0x00ff)
#define GETSOCK_WRITABLE (0xff00)
#define CURLPIPE_ANY (CURLPIPE_MULTIPLEX)
#ifndef CURL_DISABLE_SOCKETPAIR

View file

@ -53,20 +53,6 @@ struct Curl_multi *Curl_multi_handle(unsigned int xfer_table_size,
size_t dnssize,
size_t sesssize);
/* the write bits start at bit 16 for the *getsock() bitmap */
#define GETSOCK_WRITEBITSTART 16
#define GETSOCK_BLANK 0 /* no bits set */
/* set the bit for the given sock number to make the bitmap for writable */
#define GETSOCK_WRITESOCK(x) (1 << (GETSOCK_WRITEBITSTART + (x)))
/* set the bit for the given sock number to make the bitmap for readable */
#define GETSOCK_READSOCK(x) (1 << (x))
/* mask for checking if read and/or write is set for index x */
#define GETSOCK_MASK_RW(x) (GETSOCK_READSOCK(x)|GETSOCK_WRITESOCK(x))
/**
* Let the multi handle know that the socket is about to be closed.
* The multi will then remove anything it knows about the socket, so

View file

@ -397,8 +397,9 @@ CURLcode Curl_pp_readresp(struct Curl_easy *data,
return result;
}
int Curl_pp_getsock(struct Curl_easy *data,
struct pingpong *pp, curl_socket_t *socks)
unsigned int Curl_pp_getsock(struct Curl_easy *data,
struct pingpong *pp,
curl_socket_t *socks)
{
struct connectdata *conn = data->conn;
socks[0] = conn->sock[FIRSTSOCKET];

View file

@ -147,8 +147,9 @@ CURLcode Curl_pp_flushsend(struct Curl_easy *data,
/* call this when a pingpong connection is disconnected */
CURLcode Curl_pp_disconnect(struct pingpong *pp);
int Curl_pp_getsock(struct Curl_easy *data, struct pingpong *pp,
curl_socket_t *socks);
unsigned int Curl_pp_getsock(struct Curl_easy *data,
struct pingpong *pp,
curl_socket_t *socks);
/***********************************************************************

View file

@ -153,8 +153,9 @@ static CURLcode pop3_connect(struct Curl_easy *data, bool *done);
static CURLcode pop3_disconnect(struct Curl_easy *data,
struct connectdata *conn, bool dead);
static CURLcode pop3_multi_statemach(struct Curl_easy *data, bool *done);
static int pop3_getsock(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks);
static unsigned int pop3_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks);
static CURLcode pop3_doing(struct Curl_easy *data, bool *dophase_done);
static CURLcode pop3_setup_connection(struct Curl_easy *data,
struct connectdata *conn);
@ -1269,8 +1270,9 @@ static CURLcode pop3_block_statemach(struct Curl_easy *data,
}
/* For the POP3 "protocol connect" and "doing" phases only */
static int pop3_getsock(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks)
static unsigned int pop3_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks)
{
struct pop3_conn *pop3c = Curl_conn_meta_get(conn, CURL_META_POP3_CONN);
if(pop3c)

View file

@ -83,8 +83,9 @@ struct RTSP {
static CURLcode rtsp_do(struct Curl_easy *data, bool *done);
static CURLcode rtsp_done(struct Curl_easy *data, CURLcode, bool premature);
static CURLcode rtsp_connect(struct Curl_easy *data, bool *done);
static int rtsp_getsock_do(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks);
static unsigned int rtsp_getsock_do(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks);
/*
* Parse and write out an RTSP response.
@ -110,8 +111,9 @@ static unsigned int rtsp_conncheck(struct Curl_easy *data,
/* this returns the socket to wait for in the DO and DOING state for the multi
interface and then we are always _sending_ a request and thus we wait for
the single socket to become writable only */
static int rtsp_getsock_do(struct Curl_easy *data, struct connectdata *conn,
curl_socket_t *socks)
static unsigned int rtsp_getsock_do(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks)
{
/* write mode */
(void)data;

View file

@ -298,8 +298,9 @@ static CURLcode smb_connect(struct Curl_easy *data, bool *done);
static CURLcode smb_connection_state(struct Curl_easy *data, bool *done);
static CURLcode smb_do(struct Curl_easy *data, bool *done);
static CURLcode smb_request_state(struct Curl_easy *data, bool *done);
static int smb_getsock(struct Curl_easy *data, struct connectdata *conn,
curl_socket_t *socks);
static unsigned int smb_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks);
static CURLcode smb_parse_url_path(struct Curl_easy *data,
struct smb_conn *smbc,
struct smb_request *req);
@ -1204,8 +1205,9 @@ static CURLcode smb_request_state(struct Curl_easy *data, bool *done)
return CURLE_OK;
}
static int smb_getsock(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks)
static unsigned int smb_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks)
{
(void)data;
socks[0] = conn->sock[FIRSTSOCKET];

View file

@ -157,8 +157,9 @@ static CURLcode smtp_connect(struct Curl_easy *data, bool *done);
static CURLcode smtp_disconnect(struct Curl_easy *data,
struct connectdata *conn, bool dead);
static CURLcode smtp_multi_statemach(struct Curl_easy *data, bool *done);
static int smtp_getsock(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks);
static unsigned int smtp_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks);
static CURLcode smtp_doing(struct Curl_easy *data, bool *dophase_done);
static CURLcode smtp_setup_connection(struct Curl_easy *data,
struct connectdata *conn);
@ -1413,8 +1414,9 @@ static CURLcode smtp_block_statemach(struct Curl_easy *data,
}
/* For the SMTP "protocol connect" and "doing" phases only */
static int smtp_getsock(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks)
static unsigned int smtp_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks)
{
struct smtp_conn *smtpc = Curl_conn_meta_get(conn, CURL_META_SMTP_CONN);
return smtpc ?

View file

@ -160,8 +160,9 @@ static CURLcode tftp_setup_connection(struct Curl_easy *data,
struct connectdata *conn);
static CURLcode tftp_multi_statemach(struct Curl_easy *data, bool *done);
static CURLcode tftp_doing(struct Curl_easy *data, bool *dophase_done);
static int tftp_getsock(struct Curl_easy *data, struct connectdata *conn,
curl_socket_t *socks);
static unsigned int tftp_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks);
static CURLcode tftp_translate_code(tftp_error_t error);
@ -1081,8 +1082,9 @@ static CURLcode tftp_done(struct Curl_easy *data, CURLcode status,
* The getsock callback
*
**********************************************************/
static int tftp_getsock(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks)
static unsigned int tftp_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks)
{
(void)data;
socks[0] = conn->sock[FIRSTSOCKET];

View file

@ -34,8 +34,9 @@ void Curl_init_CONNECT(struct Curl_easy *data);
CURLcode Curl_pretransfer(struct Curl_easy *data);
CURLcode Curl_sendrecv(struct Curl_easy *data, struct curltime *nowp);
int Curl_single_getsock(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks);
unsigned int Curl_single_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks);
CURLcode Curl_retry_request(struct Curl_easy *data, char **url);
bool Curl_meets_timecondition(struct Curl_easy *data, time_t timeofdoc);

View file

@ -471,6 +471,25 @@ struct hostname {
#define FIRSTSOCKET 0
#define SECONDARYSOCKET 1
/* we support N sockets per easy handle. Set the corresponding bit to what
action we should wait for */
#define MAX_SOCKSPEREASYHANDLE 16
/* the write bits start at bit 16 for the *getsock() bitmap */
#define GETSOCK_WRITEBITSTART 16
#define GETSOCK_BLANK 0U /* no bits set */
/* set the bit for the given sock number to make the bitmap for writable */
#define GETSOCK_WRITESOCK(x) (1U << (GETSOCK_WRITEBITSTART + (x)))
/* set the bit for the given sock number to make the bitmap for readable */
#define GETSOCK_READSOCK(x) (1U << (x))
/* mask for checking if read and/or write is set for index x */
#define GETSOCK_MASK_RW(x) (GETSOCK_READSOCK(x)|GETSOCK_WRITESOCK(x))
/* Polling requested by an easy handle.
* `action` is CURL_POLL_IN, CURL_POLL_OUT or CURL_POLL_INOUT.
*/
@ -516,24 +535,28 @@ struct Curl_handler {
/* Called from the multi interface during the PROTOCONNECT phase, and it
should then return a proper fd set */
int (*proto_getsock)(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks);
unsigned int (*proto_getsock)(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks);
/* Called from the multi interface during the DOING phase, and it should
then return a proper fd set */
int (*doing_getsock)(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks);
unsigned int (*doing_getsock)(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks);
/* Called from the multi interface during the DO_MORE phase, and it should
then return a proper fd set */
int (*domore_getsock)(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks);
unsigned int (*domore_getsock)(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks);
/* Called from the multi interface during the DO_DONE, PERFORM and
WAITPERFORM phases, and it should then return a proper fd set. Not setting
this will make libcurl use the generic default one. */
int (*perform_getsock)(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks);
unsigned int (*perform_getsock)(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *socks);
/* This function *MAY* be set to a protocol-dependent function that is run
* by the curl_disconnect(), as a step in the disconnection. If the handler

View file

@ -125,8 +125,9 @@ CURLcode sftp_perform(struct Curl_easy *data,
bool *connected,
bool *dophase_done);
static int myssh_getsock(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *sock);
static unsigned int myssh_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *sock);
static void myssh_block2waitfor(struct connectdata *conn,
struct ssh_conn *sshc,
bool block);
@ -2390,9 +2391,9 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data,
/* called by the multi interface to figure out what socket(s) to wait for and
for what actions in the DO_DONE, PERFORM and WAITPERFORM states */
static int myssh_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *sock)
static unsigned int myssh_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *sock)
{
int bitmap = GETSOCK_BLANK;
(void)data;

View file

@ -99,8 +99,9 @@ static CURLcode sftp_disconnect(struct Curl_easy *data,
struct connectdata *conn, bool dead);
static CURLcode sftp_perform(struct Curl_easy *data, bool *connected,
bool *dophase_done);
static int ssh_getsock(struct Curl_easy *data, struct connectdata *conn,
curl_socket_t *sock);
static unsigned int ssh_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *sock);
static CURLcode ssh_setup_connection(struct Curl_easy *data,
struct connectdata *conn);
static void ssh_attach(struct Curl_easy *data, struct connectdata *conn);
@ -3087,9 +3088,9 @@ static CURLcode ssh_statemachine(struct Curl_easy *data,
/* called by the multi interface to figure out what socket(s) to wait for and
for what actions in the DO_DONE, PERFORM and WAITPERFORM states */
static int ssh_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *sock)
static unsigned int ssh_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *sock)
{
int bitmap = GETSOCK_BLANK;
(void)data;

View file

@ -66,9 +66,9 @@ static CURLcode wsftp_doing(struct Curl_easy *data,
static CURLcode wsftp_disconnect(struct Curl_easy *data,
struct connectdata *conn,
bool dead);
static int wssh_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *sock);
static unsigned int wssh_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *sock);
static CURLcode wssh_setup_connection(struct Curl_easy *data,
struct connectdata *conn);
static void wssh_sshc_cleanup(struct ssh_conn *sshc);
@ -1185,9 +1185,9 @@ static CURLcode wsftp_disconnect(struct Curl_easy *data,
return result;
}
static int wssh_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *sock)
static unsigned int wssh_getsock(struct Curl_easy *data,
struct connectdata *conn,
curl_socket_t *sock)
{
int bitmap = GETSOCK_BLANK;
int dir = conn->waitfor;