`

FCGI_Accept.3

阅读更多

FCGI_Accept.3
 
 
命名
     FCGI_Accept, FCGI_ToFILE, FCGI_ToFcgiStream
         - fcgi_stdio兼容库

摘要
     #include "fcgi_stdio.h"

     int
     FCGI_Accept(void);

     FILE *
     FCGI_ToFILE(FCGI_FILE *);

     FCGI_Stream *
     FCGI_ToFcgiStream(FCGI_FILE *);


说明
     FCGI_Accept函数接收来自HTTP服务器的新请求,
     并为之创建CGI兼容的执行环境。

     如果应用作为CGI程序被调用,对FCGI_Accept的首次调用根本是个空操作,
     而且第二次调用返回-1。这使正确编码的FastCGI响应器应用运行单个请求
     并退出,产生CGI行为。

     如果应用作为FastCGI服务器被调用,对FCGI_Accept的首次调用表明
     应用已经完成其初始化并且准备接受其第一个请求。对FCGI_Accept的
     后续调用表明应用已经完成了对其当前请求的处理并准备接受新请求。
     应用能通过调用FCGI_Finish(3)完成当前请求而不接受新请求;
     随后,当准备接受新请求时,应用调用FCGI_Accept。

     在完成当前请求期间,FCGI_Accept可以检测错误,例如到早前已经
     切断线路的客户端的断掉的管道。FCGI_Accept忽略这类错误。
     希望处理这类错误的应用应当显式地调用fclose(stderr),
     然后fclose(stdout);任何一个返回EOF则表示一个错误。

     当FCGI_Accept被调用时,如果环境变量FCGI_WEB_SERVER_ADDRS已经设置,
     后者应当包含逗号分隔的IP地址列表。每个IP地址写作由小数点分隔的
     [0..255]区间内的四个十进制数。(nslookup(8)把更常见的符号,
     IP主机名(hostname),转换为该形式。)所以改变量的一个合法绑定是

         FCGI_WEB_SERVER_ADDRS=199.170.183.28,199.170.183.71

     FCGI_Accept为每个新线路的同级(peer)IP地址检查列表中的成员。
     如果检查失败(包括连路不是用的TCP/IP传输这种可能),
     FCGI_Accept关闭线路并接受另一个(二者之间并不返回)。

     在收到新请求后,FCGI_Accept为全局变量stdin、stdout、stderr和environ
     赋新值。在FCGI_Accept返回后,这些变量具有同CGI入口处一样的解释。

     FCGI_Accept释放以前调用FCGI_Accept分配的任何内存。这很重要:

         不要 保留指向数组或其中的任何字符串(例如调用getenv(3)的结果),
         因为这些将被下次调用FCGI_Finish或FCGI_Accept释放。

         不要 使用setenv(3)或putenv(3)修改FCGI_Accept创建的environ数组,
         因为这将泄漏内存或致使下次调用FCGI_Finish或FCGI_Accept去释放
         不该释放的内存。

         如果你的应用需要使用setenv或putenv修改environ数组,
         则它应当遵循这种编码模式:

             char **savedEnviron, **requestEnviron;
             int acceptStatus;

             savedEnviron = environ;
             acceptStatus = FCGI_Accept();
             requestEnviron = environ;
             environ = savedEnviron;
             if(acceptStatus >= 0 && !FCGX_IsCGI()) {
                 /*
                  * requestEnviron指向FCGI_Accept分配的内存中的名-值对。
                  * 可以读取,不可保留指针 -- 改为获得拷贝。
                  */
             }
             /*
              * 可以setenv或putenv,但是小心内存泄漏!
              */

     除了标准的CGI环境变量,环境变量FCGI_ROLE总是设为当前请求的角色。
     当前定义的角色有RESPONDER、AUTHORIZER和FILTER。

     在FILTER角色中,也定义了额外的变量FCGI_DATA_LENGTH和
     FCGI_DATA_LAST_MOD。完备的信息可见man页FCGI_StartFilterData(3)。

     提供的宏FCGI_ToFILE和FCGI_ToFcgiStream允许转义为使用类型FILE或
     FCGI_Stream的原生函数。在FILE的情形中,函数将必须被分别编译,
     因为fcgi_stdio.h用FCGI_FILE替换了标准的FILE。

     
返回值
     成功调用时为0,出错时为-1(应用将会退出)。

请参阅
     FCGI_Finish(3)
     FCGI_StartFilterData(3)
     FCGI_SetExitStatus(3)
     cgi-fcgi(1)
     nslookup(8)

历史记录
     Copyright (c) 1996 Open Market, Inc.
     关于本文件的用法和再分发信息,以及无担保说明,请参阅。
     $Id: FCGI_Accept.3,v 1.1.1.1 1997/09/16 15:36:25 stanleyg Exp $
 

回目录 [翻译]FastCGI开发者套件

分享到:
评论

相关推荐

    fcgi头文件及lib库

    3. **初始化和运行**:在主函数中,调用`FCGI_Accept`函数进入请求处理循环。每当有新的请求到来,该函数会阻塞直到有请求处理。 4. **处理请求**:在派生类的处理方法中,你可以通过FCGI的API读取和写入请求数据,...

    Fastcgi学习总结(C/C++语言版)

    例如,使用`FCGI_Accept()`函数阻塞等待新请求,接收到请求后执行相应的处理逻辑。 3. **处理请求**:根据接收到的输入数据,调用适当的应用逻辑来生成响应。 4. **发送响应**:将处理结果打包成FastCGI格式并通过...

    fastCGI学习总结

    - **循环处理请求**:使用`FCGI_Accept()`函数进入一个无限循环,等待新的请求到来。一旦接收到请求,就调用相应的处理逻辑来处理请求。 下面是一个简单的FastCGI程序实例: ```c #include "fcgi_stdio.h" /* fcgi...

    测试报文.txt

    #### 3. **XML在报文中的应用** 在给定的报文中,XML被广泛应用于定义数据结构和内容。例如: - `<accept_in>` 标签用于包裹整个报文内容。 - `<order_content>` 包含订单相关的具体信息,如订单类型、请求序列等。 ...

    java多线程tcpsocketserver源码-fcgi:fcgi

    Socket clientSocket = serverSocket.accept(); // 接受新连接 executor.execute(new ClientHandler(clientSocket)); // 创建新线程处理客户端 } } private static class ClientHandler implements Runnable {...

    java多线程tcpsocketserver源码-fcgi-2.4.1:fcgi的vatc构建

    3. **生成FCGI响应**:将处理结果封装成FCGI响应报文,包括状态码、头部和数据。 4. **发送响应**:将FCGI响应报文通过Socket回送给Web服务器,最终到达客户端。 在`fcgi-2.4.1-master`这个压缩包中,你可能找到...

    java多线程tcpsocketserver源码-FCGI:快速CGI模块(https://metacpan.org/pod/FCGI)

    Socket clientSocket = serverSocket.accept(); // 接受客户端连接 executor.execute(new ClientHandler(clientSocket)); // 使用线程池处理连接 } } private class ClientHandler implements Runnable { ...

    腾讯大讲堂可扩展Web架构探讨(共49张PPT).pptx

    它通过FCGI_Accept()函数持续接受并处理请求,提高了Web服务器的性能。 6. **负载均衡**:负载均衡是可扩展性的重要组成部分,通过分配流量到不同的服务器,提高可用性并提供故障转移。负载均衡技术包括DNS轮询、...

    java多线程tcpsocketserver源码-fcgi-archive:fcgi-归档

    3. 与Java的结合:Java中可以使用如Jetty、Tomcat等Web服务器实现FCGI支持,通过Java FastCGI库(如JavaFCGI)来处理FCGI请求。 4. 归档:fcgi-archive-master可能是包含了一个FastCGI应用的Java项目源代码,用于...

    PHP7内核CGI与FastCGI详解

    1. Worker进程等待请求,通过fcgi_accept_request函数阻塞等待。 2. 接收到请求后,解析请求数据,调用PHP_RINIT_FUNCTION扩展初始化函数。 3. 编译并执行PHP脚本,由php_execute_script负责。 4. 完成请求处理后,...

    java多线程tcpsocketserver源码-fcgi-2.4.1:fcgi的windows构建

    Java多线程TCP Socket Server源码与FastCGI(FCGI)在Windows环境下的构建 在Java编程领域,实现一个高效的多线程TCP Socket Server是常见的需求,它能够处理大量并发连接并提供服务。本话题将深入探讨如何利用Java...

    java多线程tcpsocketserver源码-fcgi:libfastcgi叉子

    Socket clientSocket = serverSocket.accept(); new Thread(new ClientHandler(clientSocket)).start(); } } static class ClientHandler implements Runnable { private Socket socket; public ...

    Linux下用Nginx作Perl程序服务器及其中Perl模块的配置

    while ($request->Accept() >= 0) { # 处理任何来自Web服务器的标准输入(用于CGI-POST操作) $stdin_passthrough = ''; $req_len = 0 + $req_params{'CONTENT_LENGTH'}; # 进一步处理请求 } } &daemonize; &...

    java多线程tcpsocketserver源码-fcgi2:来自git://git.shadowcat.co.uk/catagits/fcg

    3. 当有客户端连接时,创建新的Thread实例,并传递一个Runnable对象,该对象负责处理客户端的Socket通信。 4. 在Runnable对象的run()方法中,通过Socket对象读取客户端发送的数据,进行相应的业务逻辑处理,然后将...

    java多线程tcpsocketserver源码-fcgi:FastCGI很简单,因为它实际上是CGI,只有几个扩展

    3. 当有客户端连接时,`accept()`返回一个新的`Socket`对象,代表与客户端的连接。 4. 使用`Socket`对象的输入/输出流进行数据交换。 5. 完成通信后,关闭`Socket`和`ServerSocket`。 在Java中实现多线程TCP服务器...

    java多线程tcpsocketserver源码-FastCGI:FastCGI库(fcgi-2.4.1-SNAP-0311112127)

    通过调用其accept()方法,ServerSocket会阻塞直到有客户端连接,然后返回一个新的Socket对象,表示与客户端的连接。 3. **Socket**:Socket对象代表了服务器与客户端之间的连接。通过Socket对象,我们可以获取输入...

    java多线程tcpsocketserver源码-FastCGI-CPP:FastCGI-CPP

    `fcgi::request`对象用于获取请求信息,而`fcgi::response`对象用于构建和发送响应。 在实际项目中,FastCGI-CPP可以与Java多线程TCP Socket服务器结合,Java服务器作为FastCGI应用的前端,接收来自Web服务器的请求...

    java多线程tcpsocketserver源码-fastcgi:fastcgi

    在Java中,你可以使用开源库如`fcgi-client`和`fcgi-server`来实现FastCGI的客户端和服务器端。这些库提供了一组API,方便开发者处理FastCGI请求和响应。 在实际应用中,你可能会创建一个FastCGI服务器,接收来自...

Global site tag (gtag.js) - Google Analytics