#ifndef __KINGATE_FASTCGI_H #define __KINGATE_FASTCGI_H #include "kingate/cgi_interface.h" #include /** * @file * @brief the fastcgi-specific implementation. */ namespace kingate { /** * The fcgi listening socket. */ class fcgi_socket { static bool _initialized; public: /** * socket file descriptor. */ int sock; /** * @param s the socket name. (if the socket starts with a colon, * then it is interpreted as a tcp port number. * @param bl backlog listen queue depth. */ fcgi_socket(const char* s,int bl); /** * @param s the file descriptor of preopened socket. */ fcgi_socket(int s); ~fcgi_socket(); }; /** * The implementation of the interface to the FastCGI. */ class fcgi_interface : public cgi_interface { public: /** * stdin fcgi streambuf. */ fcgi_streambuf sbin; /** * stdout fcgi streambuf. */ fcgi_streambuf sbout; /** * stderr fcgi streambuf. */ fcgi_streambuf sberr; /** * stdin istream. */ istream sin; /** * stdout ostream. */ ostream sout; /** * stderr ostream. */ ostream serr; /** * The FCGI request. */ FCGX_Request request; /** * @param s the socked used for interfacing with the server. * @param f the request flags (e.g. FCGI_FAIL_ON_INTR). */ fcgi_interface(fcgi_socket& s,int f=0); virtual ~fcgi_interface(); /** * @overload cgi_interface::in() */ istream& in() { return sin; } /** * @overload cgi_interface::out() */ ostream& out() { return sout; } /** * @overload cgi_interface::out() */ ostream& err() { return serr; } }; } #endif /* __KINGATE_FASTCGI_H */ /* * vim:set ft=cpp: */