http_recv: set the eof flag on buffer overruns.
[paraslash.git] / http_recv.c
index b566acf..264ae2c 100644 (file)
@@ -110,6 +110,11 @@ static void http_recv_post_select(struct sched *s, struct task *t)
        struct receiver_node *rn = t->private_data;
        struct private_http_recv_data *phd = rn->private_data;
 
+       t->ret = -E_HTTP_RECV_EOF;
+       if (rn->output_eof && *rn->output_eof) {
+               rn->eof = 1;
+               return;
+       }
        t->ret = 1;
        if (!s->select_ret) /* we're not interested in timeouts */
                return;
@@ -137,8 +142,10 @@ static void http_recv_post_select(struct sched *s, struct task *t)
        }
        t->ret = -E_OVERRUN;
        /* already streaming */
-       if (rn->loaded >= BUFSIZE)
+       if (rn->loaded >= BUFSIZE) {
+               rn->eof = 1;
                return;
+       }
        t->ret = recv_bin_buffer(phd->fd, rn->buf + rn->loaded,
                BUFSIZE - rn->loaded);
        if (t->ret <= 0) {