if (is_impersonate) {
RevertToSelf();
}
+#else
+#if 1
+ shutdown(req->fd, 2);
#else
close(req->fd);
+#endif
#endif
req->fd = -1;
}
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;
}