From d6c48b4a5fb667b0fba91af5d9113209ae72eede Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 28 Sep 2010 02:33:23 +0200 Subject: s4:wrepl_server: use SOCKET_FLAG_NOCLOSE instead of a dup() The key thing is that we might have to turn the incomming connection into a outgoing connection. This change makes sense anyway, because we donate the fd to tstream. metze --- source4/wrepl_server/wrepl_in_connection.c | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) (limited to 'source4/wrepl_server/wrepl_in_connection.c') diff --git a/source4/wrepl_server/wrepl_in_connection.c b/source4/wrepl_server/wrepl_in_connection.c index 5fd2435110..a32b842e04 100644 --- a/source4/wrepl_server/wrepl_in_connection.c +++ b/source4/wrepl_server/wrepl_in_connection.c @@ -104,7 +104,7 @@ static void wreplsrv_accept(struct stream_connection *conn) struct tsocket_address *peer_addr; char *peer_ip; struct tevent_req *subreq; - int rc, fd; + int rc; wrepl_conn = talloc_zero(conn, struct wreplsrv_in_connection); if (wrepl_conn == NULL) { @@ -122,30 +122,15 @@ static void wreplsrv_accept(struct stream_connection *conn) TALLOC_FREE(conn->event.fde); - /* - * Clone the fd that the connection isn't closed if we create a client - * connection. - */ - fd = dup(socket_get_fd(conn->socket)); - if (fd == -1) { - char *reason; - - reason = talloc_asprintf(conn, - "wrepl_accept: failed to duplicate the file descriptor - %s", - strerror(errno)); - if (reason == NULL) { - reason = strerror(errno); - } - stream_terminate_connection(conn, reason); - } rc = tstream_bsd_existing_socket(wrepl_conn, - fd, + socket_get_fd(conn->socket), &wrepl_conn->tstream); if (rc < 0) { stream_terminate_connection(conn, "wrepl_accept: out of memory"); return; } + socket_set_flags(conn->socket, SOCKET_FLAG_NOCLOSE); wrepl_conn->conn = conn; wrepl_conn->service = service; -- cgit