]> granicus.if.org Git - php/commitdiff
Especially on FreeBSD it seems to be common that send(2) does not
authorSascha Schumann <sas@php.net>
Wed, 10 Jan 2001 13:51:58 +0000 (13:51 +0000)
committerSascha Schumann <sas@php.net>
Wed, 10 Jan 2001 13:51:58 +0000 (13:51 +0000)
do a decent job.  We handle that better now.

sapi/thttpd/thttpd.c

index 7c37606a4b5546bc237f7e5f7a906a9f0f6bb3c4..947e00c9d948734b69209ee715db4a77b83bb4f2 100644 (file)
@@ -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)