c++ - FastCGI 应用程序 - 如何获取监听套接字句柄?

标签 c++ sockets assembly fastcgi

该主题的所有示例均基于某些 C/C++ 库,如 fcgi_stdio 和类似库。但是我想使用汇编语言制作一个 FastCGI 脚本,但没有这样的库。

几乎所有关于协议(protocol)和通信的内容都清楚了,但我仍然无法理解程序如何获得 Web 服务器传递的监听套接字的句柄?

我的发现:

我安装了 lighttpd 服务器并尝试配置它以使 fastCGI 与我的程序一起工作。

但我很困惑,配置文件需要“host”和“port”——这是否意味着 FastCGI 应该自己创建监听套接字?我的意思是使用 socket/bind/listen/accept 函数?那么我的应用程序将如何知道这些主机和端口参数。它们在 Web 服务器配置文件中?

lighttpd 允许的另一种方式是指定一些命名的套接字路径 - 例如“/tmp/myapp.socket”。我的应用程序必须如何处理这个?它如何知道这条路径?

我尝试使用 accept(0, ...) 编写一些小程序,如@user58697 在他的回答中指定的那样(这个答案符合官方的 FastCGI 规范!)不幸的是什么都没有发生 - 调用 accept 惨遭失败!

那么,通信是特定于服务器的吗?

最佳答案

根据spec ,从应用程序的角度来看,FCGI_LISTENSOCK_FILENO 等于 STDIN_FILENO,它被定义为 0。这意味着你应该 accept(STDIN_FILENO, ...) 甚至 accept(0, ... )

关于c++ - FastCGI 应用程序 - 如何获取监听套接字句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23017849/

相关文章:

linux - 如何理解 "__xchg"函数中的内联汇编?

c++ - Qt4 不会用 CMake 编译

c++ - 之间的差异。和::在 C++ 中用于静态成员?

c++ - 如何转换dfs

c++ - 尝试退出循环时 Ctrl+Z 不起作用

c - 如何完全破坏C中的套接字连接

通过 TCP 的 Python 流数据

Java - SSL - 使用 gmail 的 SMTP 服务器进行身份验证

assembly - 如果函数没有显式使用 'ret',为什么没有返回值

linux - 为什么我的汇编代码应该在 O(N*sqrt(N)) 时间内运行,但它却在线性时间内运行?