From 0fa705ce86dc4783668e154b381887a0e011d612 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 3 Jun 2015 13:41:24 +0000 Subject: [PATCH] tstream: Make socketpair nonblocking When we have a large RPC reply, we can't block in the RPC server. Test: Do rpcclient netshareenumall with a thousand shares defined Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- libcli/named_pipe_auth/npa_tstream.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/libcli/named_pipe_auth/npa_tstream.c b/libcli/named_pipe_auth/npa_tstream.c index 3d3f55e..3539202 100644 --- a/libcli/named_pipe_auth/npa_tstream.c +++ b/libcli/named_pipe_auth/npa_tstream.c @@ -1468,17 +1468,23 @@ int _tstream_npa_socketpair(uint16_t file_type, fd1 = fds[0]; fd2 = fds[1]; + rc = set_blocking(fd1, false); + if (rc == -1) { + goto close_fail; + } + + rc = set_blocking(fd2, false); + if (rc == -1) { + goto close_fail; + } + rc = _tstream_npa_existing_socket(mem_ctx1, fd1, file_type, &stream1, location); if (rc == -1) { - int sys_errno = errno; - close(fd1); - close(fd2); - errno = sys_errno; - return -1; + goto close_fail; } rc = _tstream_npa_existing_socket(mem_ctx2, @@ -1498,4 +1504,13 @@ int _tstream_npa_socketpair(uint16_t file_type, *pstream2 = stream2; return 0; + +close_fail: + { + int sys_errno = errno; + close(fd1); + close(fd2); + errno = sys_errno; + return -1; + } } -- 2.2.0.rc0.207.ga3a616c