libbinder: RPC avoid SIGPIPE
This was just being ignored before in our tests, but we can use
MSG_NOSIGNAL to avoid this.
Fixes: 183141167
Test: binderRpcTest on host and device (including after removing
RpcState::terminate which was avoiding SIGPIPE in at least some
cases)
Change-Id: I7c84fc28ff21400f2546f88403a79fae8985c4b7
diff --git a/libs/binder/RpcState.cpp b/libs/binder/RpcState.cpp
index 64e842e..3b3adca 100644
--- a/libs/binder/RpcState.cpp
+++ b/libs/binder/RpcState.cpp
@@ -192,7 +192,7 @@
return false;
}
- ssize_t sent = TEMP_FAILURE_RETRY(send(fd.get(), data, size, 0));
+ ssize_t sent = TEMP_FAILURE_RETRY(send(fd.get(), data, size, MSG_NOSIGNAL));
if (sent < 0 || sent != static_cast<ssize_t>(size)) {
ALOGE("Failed to send %s (sent %zd of %zu bytes) on fd %d, error: %s", what, sent, size,
@@ -212,7 +212,7 @@
return false;
}
- ssize_t recd = TEMP_FAILURE_RETRY(recv(fd.get(), data, size, MSG_WAITALL));
+ ssize_t recd = TEMP_FAILURE_RETRY(recv(fd.get(), data, size, MSG_WAITALL | MSG_NOSIGNAL));
if (recd < 0 || recd != static_cast<ssize_t>(size)) {
terminate();