From: Andre Noll Date: Sat, 2 Feb 2008 13:28:25 +0000 (+0100) Subject: http_send.c: Never check the client fd for writability. X-Git-Tag: v0.3.1~57 X-Git-Url: http://git.tue.mpg.de/?a=commitdiff_plain;h=7ce5851c7b28e0bcc81c4b7d7744d337c081100e;p=paraslash.git http_send.c: Never check the client fd for writability. The fd is set to nonblocking mode, so writes will never block but fail. --- diff --git a/http_send.c b/http_send.c index 18ad9a54..8f834f70 100644 --- a/http_send.c +++ b/http_send.c @@ -59,8 +59,6 @@ struct http_client { enum http_status status; /** Non-zero if we included \a fd in the read set.*/ int check_r; - /** Non-zero if we included \a fd in the write set. */ - int check_w; /** The position of this client in the client list. */ struct list_head node; /** non-zero if audio file header has been sent */ @@ -198,7 +196,7 @@ static void http_send(long unsigned current_chunk, } } -static void http_post_select(fd_set *rfds, fd_set *wfds) +static void http_post_select(fd_set *rfds, __a_unused fd_set *wfds) { int i = -1, match; struct http_client *hc, *tmp; @@ -225,17 +223,12 @@ static void http_post_select(fd_set *rfds, fd_set *wfds) } break; case HTTP_GOT_GET_REQUEST: /* need to send ok msg */ - if (hc->check_w && FD_ISSET(hc->fd, wfds)) { - hc->status = HTTP_STREAMING; - http_send_ok_msg(hc); - } + hc->status = HTTP_STREAMING; + http_send_ok_msg(hc); break; case HTTP_INVALID_GET_REQUEST: /* need to send err msg */ - if (hc->check_w && FD_ISSET(hc->fd, wfds)) { - if (http_send_err_msg(hc) >= 0) - http_shutdown_client(hc, - "invalid get request"); - } + if (http_send_err_msg(hc) >= 0) + http_shutdown_client(hc, "invalid get request"); break; } } @@ -279,7 +272,7 @@ err_out: free(hc); } -static void http_pre_select(int *max_fileno, fd_set *rfds, fd_set *wfds) +static void http_pre_select(int *max_fileno, fd_set *rfds, __a_unused fd_set *wfds) { struct http_client *hc, *tmp; @@ -289,19 +282,15 @@ static void http_pre_select(int *max_fileno, fd_set *rfds, fd_set *wfds) list_for_each_entry_safe(hc, tmp, &clients, node) { //PARA_DEBUG_LOG("hc %p on fd %d: status %d\n", hc, hc->fd, hc->status); hc->check_r = 0; - hc->check_w = 0; switch (hc->status) { case HTTP_STREAMING: + case HTTP_GOT_GET_REQUEST: /* need to send ok msg */ + case HTTP_INVALID_GET_REQUEST: /* need to send err msg */ break; case HTTP_CONNECTED: /* need to recv get request */ para_fd_set(hc->fd, rfds, max_fileno); hc->check_r = 1; break; - case HTTP_GOT_GET_REQUEST: /* need to send ok msg */ - case HTTP_INVALID_GET_REQUEST: /* need to send err msg */ - para_fd_set(hc->fd, wfds, max_fileno); - hc->check_w = 1; - break; } } }