sas Fri Mar 2 09:01:52 2001 EDT
Modified files:
/php4/sapi/thttpd thttpd.c
Log:
Combine all HTTP headers into a single writev
Index: php4/sapi/thttpd/thttpd.c
diff -u php4/sapi/thttpd/thttpd.c:1.37 php4/sapi/thttpd/thttpd.c:1.38
--- php4/sapi/thttpd/thttpd.c:1.37 Sun Feb 25 22:07:38 2001
+++ php4/sapi/thttpd/thttpd.c Fri Mar 2 09:01:52 2001
@@ -66,40 +66,51 @@
return sent;
}
+#define COMBINE_HEADERS 30
+
static int sapi_thttpd_send_headers(sapi_headers_struct *sapi_headers SLS_DC)
{
char buf[1024];
-
+ struct iovec vec[COMBINE_HEADERS];
+ int n = 0;
+ zend_llist_position pos;
+ sapi_header_struct *h;
+
if (!SG(sapi_headers).http_status_line) {
size_t len;
snprintf(buf, 1023, "HTTP/1.0 %d Something\r\n",
SG(sapi_headers).http_response_code);
len = strlen(buf);
- send(TG(hc)->conn_fd, buf, len, 0);
+ vec[n].iov_base = buf;
+ vec[n++].iov_len = len;
TG(hc)->status = SG(sapi_headers).http_response_code;
TG(hc)->bytes += len;
}
-
- return SAPI_HEADER_DO_SEND;
-}
-
-static void sapi_thttpd_send_header(sapi_header_struct *sapi_header, void
*server_context)
-{
- struct iovec vec[2];
- int n = 0;
- TLS_FETCH();
- if (sapi_header) {
- vec[n].iov_base = sapi_header->header;
- vec[n++].iov_len = sapi_header->header_len;
- TG(hc)->bytes += sapi_header->header_len;
+ h = zend_llist_get_first_ex(&sapi_headers->headers, &pos);
+ while (h) {
+ vec[n].iov_base = h->header;
+ vec[n++].iov_len = h->header_len;
+ if (n >= COMBINE_HEADERS - 1) {
+ if (writev(TG(hc)->conn_fd, vec, n) == -1 && errno == EPIPE)
+ php_handle_aborted_connection();
+ n = 0;
+ }
+ vec[n].iov_base = "\r\n";
+ vec[n++].iov_len = 2;
+
+ h = zend_llist_get_next_ex(&sapi_headers->headers, &pos);
}
+
vec[n].iov_base = "\r\n";
vec[n++].iov_len = 2;
- TG(hc)->bytes += 2;
+
+ if (n) {
+ if (writev(TG(hc)->conn_fd, vec, n) == -1 && errno == EPIPE)
+ php_handle_aborted_connection();
+ }
- if (writev(TG(hc)->conn_fd, vec, n) == -1 && errno == EPIPE)
- php_handle_aborted_connection();
+ return SAPI_HEADER_SENT_SUCCESSFULLY;
}
static int sapi_thttpd_read_post(char *buffer, uint count_bytes SLS_DC)
@@ -211,7 +222,7 @@
NULL,
sapi_thttpd_send_headers,
- sapi_thttpd_send_header,
+ NULL,
sapi_thttpd_read_post,
sapi_thttpd_read_cookies,
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]