📄 fcgi.cpp
字号:
#include "fcgi.h"#include "cppcms_error.h"#include <errno.h>namespace cppcms {fcgi_stream::fcgi_stream(FCGX_Request &req) : std::ostream(&fcgi_cout), request(req), fcgi_cout(req.out), fcgi_cerr(req.err), stream_cerr(&fcgi_cerr){};std::string fcgi_stream::getenv(const char *variable){ char const *p; if((p=FCGX_GetParam(variable,request.envp))!=NULL) return p; return "";};size_t fcgi_stream::read(char *d,size_t len){ return FCGX_GetStr(d,len,request.in);};std::ostream &fcgi_stream::err(){ return stream_cerr;};fcgi_stream::~fcgi_stream(){ FCGX_Finish_r(&request);};pthread_once_t fcgi_api::init_fcgi = PTHREAD_ONCE_INIT;void fcgi_api::init(){ FCGX_Init();}fcgi_api::fcgi_api(char const *socket,int backlog){ pthread_once(&init_fcgi,fcgi_api::init); if(socket && socket[0]!='\0') { fd=FCGX_OpenSocket(socket,backlog); } else { fd=0; // STDIN } if(fd<0) { throw cppcms_error(errno,"FCGX_OpenSocket"); }}cgi_session *fcgi_api::accept_session(){ FCGX_Request *request=new FCGX_Request(); FCGX_InitRequest(request,fd,FCGI_FAIL_ACCEPT_ON_INTR); if(FCGX_Accept_r(request)<0) { delete request; return NULL; } return new fcgi_session(request,NULL);}bool fcgi_session::prepare(){ connection=new cgicc_connection_fast_cgi(*request); return true;}cgicc_connection &fcgi_session::get_connection(){ if(!connection) { throw cppcms_error("Connection was not prepared"); } return *connection;}fcgi_api::~fcgi_api(){ if(fd!=-1) close(fd);}};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -