From: Volker Lendecke Date: Sun, 17 Jan 2021 10:04:47 +0000 (+0100) Subject: lib: Make accept_recv() return the listening socket X-Git-Tag: tevent-0.11.0~1995 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e593f969607791571248dd3341089001f49362fa;p=thirdparty%2Fsamba.git lib: Make accept_recv() return the listening socket This is helpful if you are in a listening loop with the same receiver for many sockets doing the same thing. Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/ctdb/common/sock_daemon.c b/ctdb/common/sock_daemon.c index 7d026515d68..6298653f4ec 100644 --- a/ctdb/common/sock_daemon.c +++ b/ctdb/common/sock_daemon.c @@ -371,7 +371,7 @@ static void sock_socket_start_new_client(struct tevent_req *subreq) struct sock_client *client; int client_fd, ret; - client_fd = accept_recv(subreq, NULL, &ret); + client_fd = accept_recv(subreq, NULL, NULL, &ret); TALLOC_FREE(subreq); if (client_fd == -1) { D_ERR("failed to accept new connection\n"); diff --git a/ctdb/tests/src/comm_server_test.c b/ctdb/tests/src/comm_server_test.c index 721aa679b63..86b5658b949 100644 --- a/ctdb/tests/src/comm_server_test.c +++ b/ctdb/tests/src/comm_server_test.c @@ -175,7 +175,7 @@ static void socket_process_client(struct tevent_req *subreq) int client_fd; int err = 0; - client_fd = accept_recv(subreq, NULL, &err); + client_fd = accept_recv(subreq, NULL, NULL, &err); TALLOC_FREE(subreq); state->num_clients++; diff --git a/ctdb/tests/src/fake_ctdbd.c b/ctdb/tests/src/fake_ctdbd.c index 2b2ed066f75..146b7da344c 100644 --- a/ctdb/tests/src/fake_ctdbd.c +++ b/ctdb/tests/src/fake_ctdbd.c @@ -4284,7 +4284,7 @@ static void server_new_client(struct tevent_req *subreq) int client_fd; int ret = 0; - client_fd = accept_recv(subreq, NULL, &ret); + client_fd = accept_recv(subreq, NULL, NULL, &ret); TALLOC_FREE(subreq); if (client_fd == -1) { tevent_req_error(req, ret); diff --git a/lib/async_req/async_sock.c b/lib/async_req/async_sock.c index 1a39c98ab38..3035aaaf623 100644 --- a/lib/async_req/async_sock.c +++ b/lib/async_req/async_sock.c @@ -767,20 +767,27 @@ static void accept_handler(struct tevent_context *ev, struct tevent_fd *fde, } int accept_recv(struct tevent_req *req, + int *listen_sock, struct samba_sockaddr *paddr, int *perr) { struct accept_state *state = tevent_req_data(req, struct accept_state); + int sock = state->sock; int err; if (tevent_req_is_unix_error(req, &err)) { if (perr != NULL) { *perr = err; } + tevent_req_received(req); return -1; } + if (listen_sock != NULL) { + *listen_sock = state->listen_sock; + } if (paddr != NULL) { *paddr = state->addr; } - return state->sock; + tevent_req_received(req); + return sock; } diff --git a/lib/async_req/async_sock.h b/lib/async_req/async_sock.h index 6952345df0c..780195e3725 100644 --- a/lib/async_req/async_sock.h +++ b/lib/async_req/async_sock.h @@ -61,6 +61,7 @@ struct samba_sockaddr; struct tevent_req *accept_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, int listen_sock); int accept_recv(struct tevent_req *req, + int *listen_sock, struct samba_sockaddr *paddr, int *perr);