mirror of
https://github.com/php/php-src.git
synced 2025-08-20 09:24:05 +02:00
Improve robustness of sending routines
This commit is contained in:
parent
41da75d59f
commit
58c106cb06
1 changed files with 32 additions and 12 deletions
|
@ -27,7 +27,7 @@
|
|||
|
||||
#include <unixlib/local.h>
|
||||
|
||||
#define WEBJAMES_SAPI_VERSION "1.0.1"
|
||||
#define WEBJAMES_SAPI_VERSION "1.0.2"
|
||||
|
||||
typedef struct {
|
||||
struct connection *conn; /*structure holding all the details of the current request*/
|
||||
|
@ -42,24 +42,44 @@ static php_webjames_globals webjames_globals;
|
|||
static int sapi_webjames_ub_write(const char *str, uint str_length TSRMLS_DC)
|
||||
/*unbuffered write - send data straight out to socket*/
|
||||
{
|
||||
int bytes;
|
||||
|
||||
bytes = webjames_writebuffer(WG(conn),str,str_length);
|
||||
if (bytes<0) {
|
||||
PG(connection_status) = PHP_CONNECTION_ABORTED;
|
||||
if (!PG(ignore_user_abort)) {
|
||||
zend_bailout();
|
||||
int totalbytes = 0;
|
||||
|
||||
do {
|
||||
int bytes;
|
||||
bytes = webjames_writebuffer(WG(conn),str,str_length);
|
||||
if (bytes<0) {
|
||||
PG(connection_status) = PHP_CONNECTION_ABORTED;
|
||||
if (!PG(ignore_user_abort)) {
|
||||
zend_bailout();
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
}
|
||||
return bytes;
|
||||
str += bytes;
|
||||
str_length -= bytes;
|
||||
totalbytes += bytes;
|
||||
} while (str_length);
|
||||
return totalbytes;
|
||||
}
|
||||
|
||||
static void sapi_webjames_send_header(sapi_header_struct *sapi_header, void *server_context TSRMLS_DC)
|
||||
/*send an HTTP header*/
|
||||
{
|
||||
char *header = sapi_header->header;
|
||||
int len = sapi_header->header_len;
|
||||
if (WG(conn)->flags.outputheaders) {
|
||||
if (sapi_header)
|
||||
webjames_writebuffer(WG(conn), sapi_header->header, sapi_header->header_len);
|
||||
while (sapi_header && len > 0) {
|
||||
int bytes;
|
||||
bytes = webjames_writebuffer(WG(conn), header, len);
|
||||
if (bytes<0) {
|
||||
PG(connection_status) = PHP_CONNECTION_ABORTED;
|
||||
if (!PG(ignore_user_abort)) {
|
||||
zend_bailout();
|
||||
}
|
||||
return;
|
||||
}
|
||||
header += bytes;
|
||||
len -= bytes;
|
||||
}
|
||||
webjames_writestring(WG(conn), "\r\n");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue