2014-04-11 45 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