|
|
|
@ -617,8 +617,12 @@ static inline void fcgi_close(fcgi_request *req, int force, int destroy) |
|
|
|
if (is_impersonate) { |
|
|
|
RevertToSelf(); |
|
|
|
} |
|
|
|
#else |
|
|
|
#if 1 |
|
|
|
shutdown(req->fd, 2); |
|
|
|
#else |
|
|
|
close(req->fd); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
req->fd = -1; |
|
|
|
} |
|
|
|
@ -814,16 +818,30 @@ int fcgi_write(fcgi_request *req, fcgi_request_type type, const char *str, int l |
|
|
|
memcpy(req->out_pos, str + limit, len - limit); |
|
|
|
req->out_pos += len - limit; |
|
|
|
} else { |
|
|
|
int pad = ((len + 7) & ~7) - len; |
|
|
|
int pos = 0; |
|
|
|
int pad; |
|
|
|
|
|
|
|
close_packet(req); |
|
|
|
while ((len - pos) > 0xffff) { |
|
|
|
open_packet(req, type); |
|
|
|
fcgi_make_header(req->out_hdr, type, req->id, 0xfff8); |
|
|
|
req->out_hdr = NULL; |
|
|
|
fcgi_flush(req, 0); |
|
|
|
if (safe_write(req, str + pos, 0xfff8) != 0xfff8) { |
|
|
|
req->keep = 0; |
|
|
|
return -1; |
|
|
|
} |
|
|
|
pos += 0xfff8; |
|
|
|
} |
|
|
|
|
|
|
|
pad = (((len - pos) + 7) & ~7) - (len - pos); |
|
|
|
rest = pad ? 8 - pad : 0; |
|
|
|
|
|
|
|
close_packet(req); |
|
|
|
open_packet(req, type); |
|
|
|
fcgi_make_header(req->out_hdr, type, req->id, len - rest); |
|
|
|
fcgi_make_header(req->out_hdr, type, req->id, (len - pos) - rest); |
|
|
|
req->out_hdr = NULL; |
|
|
|
fcgi_flush(req, 0); |
|
|
|
if (safe_write(req, str, len - rest) != len - rest) { |
|
|
|
if (safe_write(req, str + pos, (len - pos) - rest) != (len - pos) - rest) { |
|
|
|
req->keep = 0; |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|