summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2005-07-04 18:08:49 (UTC)
committer Michael Krelin <hacker@klever.net>2005-07-04 18:08:49 (UTC)
commitc8bcbfb951eec5fe14dac0b14f4faaf4a9f9f229 (patch) (side-by-side diff)
tree60d24c0465cd57c839fa46de97cc35e59cc5b535
parent43d47575878e4eaf3c8da84bf609fcd0bde595fb (diff)
downloadkingate-c8bcbfb951eec5fe14dac0b14f4faaf4a9f9f229.zip
kingate-c8bcbfb951eec5fe14dac0b14f4faaf4a9f9f229.tar.gz
kingate-c8bcbfb951eec5fe14dac0b14f4faaf4a9f9f229.tar.bz2
added buffers to fastcgi streambufs. It gains compatibility with normal streambuf manipulations at the cost of performance (according to comments in fcgi devkit). The performance lost should not be disastrous, though.
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--include/kingate/fastcgi.h15
-rw-r--r--src/fastcgi.cc5
2 files changed, 19 insertions, 1 deletions
diff --git a/include/kingate/fastcgi.h b/include/kingate/fastcgi.h
index fd293b9..6f136b3 100644
--- a/include/kingate/fastcgi.h
+++ b/include/kingate/fastcgi.h
@@ -38,20 +38,35 @@ namespace kingate {
/**
* The implementation of the interface to the FastCGI.
*/
class fcgi_interface : public cgi_interface {
public:
/**
+ * buffer for sbin
+ * @see sbin
+ */
+ char buf_sbin[512];
+ /**
* stdin fcgi streambuf.
*/
fcgi_streambuf sbin;
/**
+ * buffer for sbout
+ * @see sbout
+ */
+ char buf_sbout[512];
+ /**
* stdout fcgi streambuf.
*/
fcgi_streambuf sbout;
/**
+ * buffer for sberr
+ * @see sberr
+ */
+ char buf_sberr[512];
+ /**
* stderr fcgi streambuf.
*/
fcgi_streambuf sberr;
/**
* stdin istream.
*/
diff --git a/src/fastcgi.cc b/src/fastcgi.cc
index 6285370..8b7668c 100644
--- a/src/fastcgi.cc
+++ b/src/fastcgi.cc
@@ -34,13 +34,16 @@ namespace kingate {
fcgi_socket::~fcgi_socket() {
if(sock>=0)
close(sock);
}
fcgi_interface::fcgi_interface(fcgi_socket& s,int f)
- : sin(&sbin), sout(&sbout), serr(&sberr) {
+ : sbin(buf_sbin,sizeof(buf_sbin)),
+ sbout(buf_sbout,sizeof(buf_sbout)),
+ sberr(buf_sberr,sizeof(buf_sberr)),
+ sin(&sbin), sout(&sbout), serr(&sberr) {
if( FCGX_InitRequest(&request,s.sock,f) )
throw exception(CODEPOINT,"failed to FCGX_InitRequest()");
if( FCGX_Accept_r(&request) )
throw exception(CODEPOINT,"failed to FCGX_Accept_r()");
sbin.attach(request.in);
sbout.attach(request.out);