]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
lib: Use FIONREAD in wait_for_read_send/recv
authorVolker Lendecke <vl@samba.org>
Tue, 9 Mar 2021 11:54:49 +0000 (12:54 +0100)
committerJeremy Allison <jra@samba.org>
Tue, 16 Mar 2021 17:09:31 +0000 (17:09 +0000)
ENOTSOCK looks ugly in straces...

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/async_req/async_sock.c

index 3035aaaf623514f7f1906791e0e37f485022fb39..ae1d3257f65adf38280215b9eb31fc9fbff9654b 100644 (file)
@@ -652,8 +652,7 @@ static void wait_for_read_done(struct tevent_context *ev,
                private_data, struct tevent_req);
        struct wait_for_read_state *state =
            tevent_req_data(req, struct wait_for_read_state);
-       ssize_t nread;
-       char c;
+       int ret, available;
 
        if ((flags & TEVENT_FD_READ) == 0) {
                return;
@@ -664,26 +663,20 @@ static void wait_for_read_done(struct tevent_context *ev,
                return;
        }
 
-       nread = recv(state->fd, &c, 1, MSG_PEEK);
+       ret = ioctl(state->fd, FIONREAD, &available);
 
-       if (nread == 0) {
-               tevent_req_error(req, EPIPE);
-               return;
-       }
-
-       if ((nread == -1) && (errno == EINTR)) {
+       if ((ret == -1) && (errno == EINTR)) {
                /* come back later */
                return;
        }
 
-       if ((nread == -1) && (errno == ENOTSOCK)) {
-               /* Ignore this specific error on pipes */
-               tevent_req_done(req);
+       if (ret == -1) {
+               tevent_req_error(req, errno);
                return;
        }
 
-       if (nread == -1) {
-               tevent_req_error(req, errno);
+       if (available == 0) {
+               tevent_req_error(req, EPIPE);
                return;
        }