1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

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
This commit is contained in:
Stefan Metzmacher 2010-09-28 02:33:23 +02:00
parent 9d8b886b3e
commit d6c48b4a5f

View File

@ -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;