Fix broken pipe handling
authorStefan Metzmacher <metze@samba.org>
Tue, 6 Apr 2010 12:06:39 +0000 (14:06 +0200)
committerStefan Metzmacher <metze@samba.org>
Wed, 7 Apr 2010 11:59:14 +0000 (13:59 +0200)
Metze is right: If we have *any* error at the socket level, we just can
not continue.

Also, apply some defensive programming: With this async stuff someone else
might already have closed the socket.
(cherry picked from commit f140bf2e6578e45b8603d4a6c5feef9a3b735804)

Signed-off-by: Stefan Metzmacher <metze@samba.org>
source3/rpc_client/rpc_transport_sock.c

index 0e9706d74e4eed677661e0340816bc3138adf076..d61f4e9ab81ab43d483520e7273ed5a49ff64a1a 100644 (file)
@@ -89,7 +89,7 @@ static void rpc_sock_read_done(struct tevent_req *subreq)
        state->received = async_recv_recv(subreq, &err);
 
        if (state->received == -1) {
-               if (err == EPIPE) {
+               if (state->transp->fd != -1) {
                        close(state->transp->fd);
                        state->transp->fd = -1;
                }
@@ -168,7 +168,7 @@ static void rpc_sock_write_done(struct tevent_req *subreq)
        state->sent = async_send_recv(subreq, &err);
 
        if (state->sent == -1) {
-               if (err == EPIPE) {
+               if (state->transp->fd != -1) {
                        close(state->transp->fd);
                        state->transp->fd = -1;
                }