Fix: error logged on partial recvmsg() in MSG_DONTWAIT
[lttng-tools.git] / src / common / sessiond-comm / inet.c
index ac450dbc8b31b9e394eac7062d326edefcc26748..57ffbe45c28ed1ae68bded38f4713f901a23deb1 100644 (file)
@@ -381,6 +381,15 @@ ssize_t lttcomm_recvmsg_inet_sock(struct lttcomm_sock *sock, void *buf,
        } while ((ret > 0 && ret < len_last) || (ret < 0 && errno == EINTR));
 
        if (ret < 0) {
        } while ((ret > 0 && ret < len_last) || (ret < 0 && errno == EINTR));
 
        if (ret < 0) {
+               if (errno == EAGAIN && flags & MSG_DONTWAIT) {
+                       /*
+                        * EAGAIN is expected in non-blocking mode and should
+                        * not be reported as an error. Moreover, if no data
+                        * was read, 0 must not be returned as it would be
+                        * interpreted as an orderly shutdown of the socket.
+                        */
+                       goto end;
+               }
                PERROR("recvmsg inet");
        } else if (ret > 0) {
                ret = len;
                PERROR("recvmsg inet");
        } else if (ret > 0) {
                ret = len;
This page took 0.023393 seconds and 4 git commands to generate.