c++ - FastCGI 通过 C : FCGX_Accept_r occasionally perform "Connection reset..."

标签 c++ c fastcgi

我有一个单线程 FastCGI“Hello, World!”应用程序,有一些代码:

error = FCGX_Init();
// error handling

socket_descriptor = FCGX_OpenSocket("127.0.0.1:1500", 5);
// error handling

error = FCGX_InitRequest(&request, socket_descriptor, 0);
// error handling

std::cout << "Awaiting connect...";
bytes_accepted = FCGX_Accept_r(&request);
// error handling
std::cout << "OK!" << std::endl;

FCGX_PutS("<title>Hello!</title>\r\n", request.out)

FCGX_Finish_r(&request);

当我启动此代码时,打开浏览器并执行“127.0.0.1:1500”,浏览器显示“连接重置”,代码输出没有类似“OK”的内容,FCGX_Accept_r 似乎卡住了。

我尝试使用 iptables 在 Debian 9 x64 上打开适当的端口:

iptables -A INPUT -i eth0 -p tcp --destination-port 1500 -j ACCEPT
iptables-save

但是没有任何效果。

我做错了什么?

最佳答案

当您没有在 url 中指定架构并且端口不特定于浏览器理解的任何特定协议(protocol)时,因此浏览器将假定 http://(或者现在可能是 https?)。您的程序需要 fastcgi,这是一个不同的协议(protocol),并且该库不理解 HTTP。也许这个请求永远不会被接受。

Fastcgi 是一种与 Web 服务器通信的协议(protocol)。您需要使用一个接受 http 请求并使用 fastcgi 协议(protocol)转发这些请求的 Web 服务器。例如,nginx支持该协议(protocol)。

关于c++ - FastCGI 通过 C : FCGX_Accept_r occasionally perform "Connection reset...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53278457/

相关文章:

c++ - Windows 不在 OpenGL 窗口上方绘制

c++ - 比较字符串末尾的字符 C++

c++ - Nvidia Nsight Eclipse 版使用 C/C++ 远程启动配置进行远程调试

c - C 中从命令行输入的字符串或字符

c - 指针递增到 NULL 直到字符串结尾如下代码但是如果检查它证明是错误的为什么?

python - 无法导入 flup.server.fcgi

c++ - 结构化绑定(bind)和 tie()

c - 为什么 setitimer 和 dup2 在 execvp 之后为子进程工作?

php - 让 Apache 在传递 HTTP 408 请求超时之前等待更长时间

go - 在 Go + FastCGI 中,使用多个处理程序有意义吗?