]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
move handling of EWOUILDBLOCK to conduit code
authorAlan T. DeKok <aland@freeradius.org>
Thu, 21 Jun 2018 19:24:48 +0000 (15:24 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 22 Jun 2018 13:42:18 +0000 (09:42 -0400)
src/modules/proto_control/conduit.c
src/modules/proto_control/proto_control_unix.c

index 42f590f749be5035f07ec11c0e8cdddad4c97800..6712a13171227329b272d4c804c78deef567ffe7 100644 (file)
@@ -78,7 +78,18 @@ ssize_t fr_conduit_read_async(int fd, fr_conduit_type_t *pconduit, void *out, si
                *pconduit = FR_CONDUIT_WANT_MORE;
 
                r = lo_read(fd, buffer + offset, sizeof(hdr) - offset);
-               if (r <= 0) return r;
+               if (r == 0) return 0; /* closed */
+
+               if (r < 0) {
+#ifdef EWOULDBLOCK
+                       if (errno == EWOULDBLOCK) return 0;
+#endif
+#ifdef EAGAIN
+                       if (errno == EAGAIN) return 0;
+#endif
+
+                       return r;
+               }
 
                *leftover += r;
                offset += r;
index beb542a8c9a96d6ad847035f05d89f0bc17d23cc..35eb2bfe5cc58c47d92ccf9bca67b2d914b9c903 100644 (file)
@@ -177,13 +177,6 @@ static ssize_t mod_read(void *instance, void **packet_ctx, fr_time_t **recv_time
         */
        data_size = fr_conduit_read_async(inst->sockfd, &conduit, buffer, buffer_len, leftover);
        if (data_size < 0) {
-#ifdef EWOULDBLOCK
-               if (errno == EWOULDBLOCK) return 0;
-#endif
-#ifdef EAGAIN
-               if (errno == EAGAIN) return 0;
-#endif
-
                DEBUG2("proto_control_unix got read error %zd: %s", data_size, fr_strerror());
                return data_size;
        }