X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=src%2Fcommon%2Fustcomm.c;h=6e6b8f3e564e8a5823a98d16b382f44fa0a1bf53;hb=d2a010d1e67e246e8ab4a847b8bbbdbce2b4e2d7;hp=ada896f68f60ad1b0d077a4786c63b44f45c123d;hpb=28db08270297a0e0654ce359069954bdc6c904f1;p=lttng-ust.git diff --git a/src/common/ustcomm.c b/src/common/ustcomm.c index ada896f6..6e6b8f3e 100644 --- a/src/common/ustcomm.c +++ b/src/common/ustcomm.c @@ -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;