diff --git a/ffserver.c b/ffserver.c index 578e56092c..06bcb2dba8 100644 --- a/ffserver.c +++ b/ffserver.c @@ -870,6 +870,7 @@ static void close_connection(HTTPContext *c) static int handle_connection(HTTPContext *c) { int len, ret; + uint8_t *ptr; switch(c->state) { case HTTPSTATE_WAIT_REQUEST: @@ -885,16 +886,16 @@ static int handle_connection(HTTPContext *c) return 0; /* read the data */ read_loop: - len = recv(c->fd, c->buffer_ptr, 1, 0); + if (!(len = recv(c->fd, c->buffer_ptr, 1, 0))) + return -1; + if (len < 0) { if (ff_neterrno() != AVERROR(EAGAIN) && ff_neterrno() != AVERROR(EINTR)) return -1; - } else if (len == 0) { - return -1; - } else { + break; + } /* search for end of request. */ - uint8_t *ptr; c->buffer_ptr += len; ptr = c->buffer_ptr; if ((ptr >= c->buffer + 2 && !memcmp(ptr-2, "\n\n", 2)) || @@ -911,7 +912,7 @@ static int handle_connection(HTTPContext *c) /* request too long: cannot do anything */ return -1; } else goto read_loop; - } + break; case HTTPSTATE_SEND_HEADER: @@ -927,7 +928,8 @@ static int handle_connection(HTTPContext *c) ff_neterrno() != AVERROR(EINTR)) { goto close_connection; } - } else { + break; + } c->buffer_ptr += len; if (c->stream) c->stream->bytes_served += len; @@ -942,7 +944,6 @@ static int handle_connection(HTTPContext *c) c->state = HTTPSTATE_SEND_DATA_HEADER; c->buffer_ptr = c->buffer_end = c->buffer; } - } break; case HTTPSTATE_SEND_DATA: @@ -994,7 +995,8 @@ static int handle_connection(HTTPContext *c) ff_neterrno() != AVERROR(EINTR)) { goto close_connection; } - } else { + break; + } c->buffer_ptr += len; c->data_count += len; if (c->buffer_ptr >= c->buffer_end) { @@ -1002,7 +1004,6 @@ static int handle_connection(HTTPContext *c) av_freep(&c->pb_buffer); start_wait_request(c, 1); } - } break; case RTSPSTATE_SEND_PACKET: if (c->poll_entry->revents & (POLLERR | POLLHUP)) { @@ -1021,14 +1022,14 @@ static int handle_connection(HTTPContext *c) av_freep(&c->packet_buffer); return -1; } - } else { + break; + } c->packet_buffer_ptr += len; if (c->packet_buffer_ptr >= c->packet_buffer_end) { /* all the buffer was sent : wait for a new request */ av_freep(&c->packet_buffer); c->state = RTSPSTATE_WAIT_REQUEST; } - } break; case HTTPSTATE_READY: /* nothing to do */