2014-04-11 44 views
1

该主题的所有示例均基于一些C/C++库,如fcgi_stdio等。但我想用汇编语言制作一个FastCGI脚本,并且没有这样的库。FastCGI应用程序 - 如何获取侦听套接字句柄?

几乎关于协议和通信的一切都很清楚,但我仍然无法理解程序如何获取监听套接字的句柄,并由Web服务器传递?

我的发现:

我安装的lighttpd服务器,并试图对其进行配置,以获得FASTCGI与我的计划工作。

但我很困惑,配置文件需要“主机”和“端口” - 这是否意味着FastCGI应该自己创建侦听套接字?我的意思是使用套接字/绑定/听/接受功能?然后我的应用程序将如何知道这些主机和端口参数。他们在Web服务器配置文件?

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

我尝试使用接受(0,...)作为@ user58697在他的答案中指定的一个小程序(并且这个答案符合官方的FastCGI规范!)不幸的是没有任何事发生 - 接受调用失败悲惨!

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

+0

我猜测至少会有一个开源实现,可以用作参考。 –

+0

@JoachimPileborg为了理解可能非常简单的东西,挖掘大量的C源代码并不是一个好主意。 – johnfound

+0

我没有看过它,但对我来说,它似乎是正常的套接字通信,这意味着每当fcgi服务器从Web服务器接收到连接时,标准的[accept()](http://linux.die。 net/man/3/accept)调用将返回一个新的套接字。 – Jester

回答

3

按照spec,从视图FCGI_LISTENSOCK_FILENO的施加点等于STDIN_FILENO,其被定义为0。这意味着,您应accept(STDIN_FILENO, ...)甚至accept(0, ...)

+0

+1真的这么简单吗? – johnfound

+0

我猜这是... – user58697

+0

这似乎不是那么简单......我将编辑该问题以描述我的发现... – johnfound