2011-03-31 65 views
4

我試圖使用IIS 7(包含在Windows 7中)來測試我目前正在開發的FastCGI庫。FastCGI在IIS 7上使用protocol = Tcp

根據最初的FastCGI規範,當調用應用程序時,其stdin句柄被替換爲套接字。默認情況下,IIS使用命名管道,但可以將其配置爲使用TCP,即套接字。

當我嘗試在我的測試應用程序中使用此套接字時,出現WSAENOTSOCK錯誤。

當我嘗試使用命名管道(重新配置IIS後)時,我遇到了類似的問題。例如,當我嘗試使用PeekNamedPipe時,我得到ERROR_INVALID_HANDLE。然而,ReadFileWriteFile正常工作。

我想問題是這個句柄是從父進程繼承的,當前進程並不真正知道它的確切類型。它似乎假定句柄代表一個簡單的文件。

有沒有人遇到類似的問題,並知道解決方案/解決方法?我可以以某種方式更新我的句柄的進程中狀態,以便WIN32 API函數將它作爲套接字/命名管道接受嗎?

回答

3

如果有人曾經絆倒過這個:DuplicateHandle會訣竅。

實際上,libfcgi implementation的函數OS_LibInit顯示瞭如何啓動通過stdin獲取套接字的FastCGI應用程序。

+0

請確保您將此標記爲正確答案。 – Kev 2011-03-31 08:32:20