diff --git a/Cargo.toml b/Cargo.toml index 72d1392..f4a61c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,7 @@ rand = "0.8.5" twoway = "0.2.2" [profile.release] -opt-level = 's' +opt-level = 3 # 's' for size lto = true # panic = 'abort' diff --git a/src/lib.rs b/src/lib.rs index 87d57e4..14d0ccf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,7 +4,7 @@ use rand::Rng; use std::collections::HashMap; use std::ffi::CString; use std::fmt::Arguments; -use std::io::{BufRead, BufReader, Error, ErrorKind, Read, Write}; +use std::io::{BufRead, BufReader, Cursor, Error, ErrorKind, Read, Write}; use std::os::fd::RawFd; use std::os::unix::io::AsRawFd; use std::time::SystemTime; @@ -724,7 +724,18 @@ impl FCGIOStream { } fn write_record(&mut self, buf: Vec) -> Result<(), std::io::Error> { - fcgi_send_stdout(self, self.id, Some(buf))?; + let mut buf_reader = BufReader::with_capacity(2048, Cursor::new(buf)); + loop { + let length = { + let buffer = buf_reader.fill_buf()?; + fcgi_send_stdout(self, self.id, Some(buffer.to_vec()))?; + buffer.len() + }; + if length == 0 { + break; + } + buf_reader.consume(length); + } Ok(()) } }