void run_server::process(socket_type ssock, pfi::lang::shared_ptr<cgi> cc) { for (;;){ pfi::lang::shared_ptr<stream_socket> sock(ssock->accept()); if (!sock) continue; if (ssock->timeout()>0 && !sock->set_timeout(ssock->timeout())) continue; try{ http::request req(sock); stringstream sout; map<string, string> env; for (http::header::iterator p=req.head().begin(); p!=req.head().end(); p++) env["HTTP_"+str_to_upper(p->first)]=p->second; env["REQUEST_METHOD"]=req.method(); env["REQUEST_URI"]=req.path().path(); if (req.path().query()!="") env["REQUEST_URI"]+="?"+req.path().query(); env["SCRIPT_NAME"]=req.path().path(); env["QUERY_STRING"]=req.path().query(); env["REMOTE_ADDR"]=sock->remote_addr().to_string(); env["REMOTE_PORT"]=lexical_cast<string>(sock->remote_port()); env["SERVER_PORT"]=lexical_cast<string>(ssock->port()); env["SERVER_NAME"]="localhost"; env["SERVER_PROTOCOL"]="HTTP/1.1"; env["SERVER_SIGNATURE"]="pficommon/" PFICOMMON_VERSION " standalone web server"; env["SERVER_SOFTWARE"]="pficommon/" PFICOMMON_VERSION; env["CONTENT_LENGTH"]=req.head()["Content-Length"]; env["CONTENT_TYPE"]=req.head()["Content-Type"]; cc->exec(req.body(), sout, cerr, env); pfi::lang::shared_ptr<http::response> resp=gen_resp(sout); resp->send(sock); } catch(exception&){ } } }