Return errors explicitly instead of using errno.

Change-Id: Ia29f500e747a8c72d13a8f38c3b08c319c8c029a
diff --git a/client/FwmarkClient.cpp b/client/FwmarkClient.cpp
index 24c84c4..03cd5fb 100644
--- a/client/FwmarkClient.cpp
+++ b/client/FwmarkClient.cpp
@@ -36,25 +36,21 @@
 
 FwmarkClient::~FwmarkClient() {
     if (mChannel >= 0) {
-        // We don't care about errors while closing the channel, so restore any previous error.
-        int error = errno;
         close(mChannel);
-        errno = error;
     }
 }
 
-bool FwmarkClient::send(void* data, size_t len, int fd) {
+int FwmarkClient::send(void* data, size_t len, int fd) {
     mChannel = socket(AF_UNIX, SOCK_STREAM, 0);
     if (mChannel == -1) {
-        return false;
+        return errno;
     }
 
     if (TEMP_FAILURE_RETRY(connect(mChannel, reinterpret_cast<const sockaddr*>(&FWMARK_SERVER_PATH),
                                    sizeof(FWMARK_SERVER_PATH))) == -1) {
         // If we are unable to connect to the fwmark server, assume there's no error. This protects
         // against future changes if the fwmark server goes away.
-        errno = 0;
-        return true;
+        return 0;
     }
 
     iovec iov;
@@ -82,14 +78,14 @@
     memcpy(CMSG_DATA(cmsgh), &fd, sizeof(fd));
 
     if (TEMP_FAILURE_RETRY(sendmsg(mChannel, &message, 0)) == -1) {
-        return false;
+        return errno;
     }
 
     int error = 0;
+
     if (TEMP_FAILURE_RETRY(recv(mChannel, &error, sizeof(error), 0)) == -1) {
-        return false;
+        return errno;
     }
 
-    errno = error;
-    return !error;
+    return error;
 }