add server-side file descriptor to collection

This commit is contained in:
yrutschle 2021-03-28 12:22:36 +02:00
parent 5948270b95
commit f51781664c

View File

@ -119,8 +119,9 @@ static int accept_new_connection(int listen_socket, struct cnx_collection *colle
/* Connect queue 1 of connection to SSL; returns new file descriptor */ /* Connect queue 1 of connection to SSL; returns new file descriptor */
static int connect_queue(struct connection *cnx, struct select_info* fd_info) static int connect_queue(cnx_collection* collection, int cnx_index, struct select_info* fd_info)
{ {
struct connection *cnx = collection_get_cnx(collection, cnx_index);
struct queue *q = &cnx->q[1]; struct queue *q = &cnx->q[1];
q->fd = connect_addr(cnx, cnx->q[0].fd); q->fd = connect_addr(cnx, cnx->q[0].fd);
@ -133,6 +134,7 @@ static int connect_queue(struct connection *cnx, struct select_info* fd_info)
FD_CLR(cnx->q[0].fd, &fd_info->fds_r); FD_CLR(cnx->q[0].fd, &fd_info->fds_r);
} }
FD_SET(q->fd, &fd_info->fds_r); FD_SET(q->fd, &fd_info->fds_r);
collection_add_fd(collection, q->fd, cnx_index);
return q->fd; return q->fd;
} else { } else {
tidy_connection(cnx, fd_info); tidy_connection(cnx, fd_info);
@ -268,8 +270,9 @@ static int is_fd_active(int fd, fd_set* set)
* IN/OUT cnx: connection data, updated if connected * IN/OUT cnx: connection data, updated if connected
* IN/OUT info: updated if connected * IN/OUT info: updated if connected
* */ * */
static void probing_read_process(struct connection* cnx, struct select_info* fd_info) static void probing_read_process(cnx_collection* collection, int cnx_index, struct select_info* fd_info)
{ {
struct connection* cnx = collection_get_cnx(collection, cnx_index);
int res; int res;
/* If timed out it's SSH, otherwise the client sent /* If timed out it's SSH, otherwise the client sent
@ -309,7 +312,7 @@ static void probing_read_process(struct connection* cnx, struct select_info* fd_
tidy_connection(cnx, fd_info); tidy_connection(cnx, fd_info);
res = -1; res = -1;
} else { } else {
res = connect_queue(cnx, fd_info); res = connect_queue(collection, cnx_index, fd_info);
} }
if (res >= fd_info->max_fd) if (res >= fd_info->max_fd)
@ -318,8 +321,10 @@ static void probing_read_process(struct connection* cnx, struct select_info* fd_
/* Process a connection that is active in read */ /* Process a connection that is active in read */
static void cnx_read_process(struct connection* cnx, int active_q, struct select_info* fd_info) static void cnx_read_process(cnx_collection* collection, int cnx_index, int active_q, struct select_info* fd_info)
{ {
struct connection* cnx = collection_get_cnx(collection, cnx_index);
switch (cnx->state) { switch (cnx->state) {
case ST_PROBING: case ST_PROBING:
@ -329,7 +334,7 @@ static void cnx_read_process(struct connection* cnx, int active_q, struct select
exit(1); exit(1);
} }
probing_read_process(cnx, fd_info); probing_read_process(collection, cnx_index, fd_info);
break; break;
@ -442,7 +447,7 @@ void main_loop(struct listen_endpoint listen_sockets[], int num_addr_listen)
((cnx->state == ST_PROBING) && (cnx->probe_timeout < time(NULL)))) { ((cnx->state == ST_PROBING) && (cnx->probe_timeout < time(NULL)))) {
if (cfg.verbose) if (cfg.verbose)
fprintf(stderr, "processing read fd%d slot %d\n", j, i); fprintf(stderr, "processing read fd%d slot %d\n", j, i);
cnx_read_process(cnx, j, &fd_info); cnx_read_process(fd_info.collection, i, j, &fd_info);
} }
} }
} }