ustcomm: implement shutdown API
[lttng-ust.git] / src / common / ustcomm.c
index ada896f68f60ad1b0d077a4786c63b44f45c123d..6e6b8f3e564e8a5823a98d16b382f44fa0a1bf53 100644 (file)
@@ -214,7 +214,7 @@ int ustcomm_listen_unix_sock(int sock)
 /*
  * ustcomm_close_unix_sock
  *
- * Shutdown cleanly a unix socket.
+ * Close unix socket.
  *
  * Handles fd tracker internally.
  */
@@ -235,6 +235,24 @@ int ustcomm_close_unix_sock(int sock)
        return ret;
 }
 
+/*
+ * ustcomm_shutdown_unix_sock
+ *
+ * Shutdown unix socket. Keeps the file descriptor open, but shutdown
+ * communication.
+ */
+int ustcomm_shutdown_unix_sock(int sock)
+{
+       int ret;
+
+       ret = shutdown(sock, SHUT_RDWR);
+       if (ret) {
+               PERROR("Socket shutdown error");
+               ret = -errno;
+       }
+       return ret;
+}
+
 /*
  * ustcomm_recv_unix_sock
  *
@@ -268,17 +286,13 @@ ssize_t ustcomm_recv_unix_sock(int sock, void *buf, size_t len)
        } while ((ret > 0 && ret < len_last) || (ret < 0 && errno == EINTR));
 
        if (ret < 0) {
-               int shutret;
-
                if (errno != EPIPE && errno != ECONNRESET && errno != ECONNREFUSED)
                        PERROR("recvmsg");
                ret = -errno;
                if (ret == -ECONNRESET || ret == -ECONNREFUSED)
                        ret = -EPIPE;
 
-               shutret = shutdown(sock, SHUT_RDWR);
-               if (shutret)
-                       ERR("Socket shutdown error");
+               (void) ustcomm_shutdown_unix_sock(sock);
        } else if (ret > 0) {
                ret = len;
        }
@@ -318,17 +332,13 @@ ssize_t ustcomm_send_unix_sock(int sock, const void *buf, size_t len)
        } while (ret < 0 && errno == EINTR);
 
        if (ret < 0) {
-               int shutret;
-
                if (errno != EPIPE && errno != ECONNRESET)
                        PERROR("sendmsg");
                ret = -errno;
                if (ret == -ECONNRESET)
                        ret = -EPIPE;
 
-               shutret = shutdown(sock, SHUT_RDWR);
-               if (shutret)
-                       ERR("Socket shutdown error");
+               (void) ustcomm_shutdown_unix_sock(sock);
        }
 
        return ret;
This page took 0.024259 seconds and 4 git commands to generate.