FastCGI с протоколом = Tcp на IIS 7 - PullRequest
4 голосов
/ 31 марта 2011

Я пытался использовать IIS 7 (как включено в Windows 7) для тестирования библиотеки FastCGI, которую я сейчас разрабатываю.

В соответствии с исходной спецификацией FastCGI, когда вызывается приложение, его stdinручка заменена на розетку.По умолчанию IIS вместо этого использует именованный канал, но его можно настроить для использования TCP, т.е. сокета.

Когда я пытаюсь использовать этот сокет в своем тестовом приложении, я получаю ошибку WSAENOTSOCK.

Когда я пытаюсь использовать именованный канал вместо (после перенастройки IIS), я сталкиваюсь с подобными проблемами.Например, я получаю ERROR_INVALID_HANDLE, когда пытаюсь использовать PeekNamedPipe.Однако ReadFile и WriteFile работают правильно.

Я думаю, проблема в том, что этот дескриптор унаследован от родительского процесса, а текущий процесс не знает его точный тип.Кажется, предполагается, что дескриптор представляет собой простой файл.

Кто-нибудь сталкивался с подобными проблемами и знает решение / обходной путь?Могу ли я каким-то образом обновить текущее состояние моего дескриптора, чтобы функция API WIN32 принимала его как сокет / именованный канал?

1 Ответ

3 голосов
/ 31 марта 2011

На случай, если кто-нибудь еще наткнется на это: DuplicateHandle добьется цели.

Фактически, функция OS_LibInit реализации libfcgi показывает, как запустить приложение FastCGI, которое получило сокет через stdin.

...