From: Sascha Schumann Date: Wed, 10 Jan 2001 13:51:58 +0000 (+0000) Subject: Especially on FreeBSD it seems to be common that send(2) does not X-Git-Tag: php-4.0.5RC1~631 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ae92ebb92bfec7f263d4e901bc23c06a6b3c3265;p=php Especially on FreeBSD it seems to be common that send(2) does not do a decent job. We handle that better now. --- diff --git a/sapi/thttpd/thttpd.c b/sapi/thttpd/thttpd.c index 7c37606a4b..947e00c9d9 100644 --- a/sapi/thttpd/thttpd.c +++ b/sapi/thttpd/thttpd.c @@ -42,17 +42,26 @@ static php_thttpd_globals thttpd_globals; static int sapi_thttpd_ub_write(const char *str, uint str_length) { int n; + uint sent = 0; TLS_FETCH(); - n = send(TG(hc)->conn_fd, str, str_length, 0); - - if (n == -1 && errno == EPIPE) { - php_handle_aborted_connection(); + while (str_length > 0) { + n = send(TG(hc)->conn_fd, str, str_length, 0); + + if (n == -1 && errno == EPIPE) + php_handle_aborted_connection(); + if (n == -1 && errno == EAGAIN) + continue; + if (n <= 0) + return n; + + TG(hc)->bytes += n; + str += n; + sent += n; + str_length -= n; } - TG(hc)->bytes += n; - - return n; + return sent; } static int sapi_thttpd_send_headers(sapi_headers_struct *sapi_headers SLS_DC)