⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fcgi.cpp

📁 C++ web POSIX framewark
💻 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 + -