2014-04-11 2 views
1

Все примеры для темы основаны на некоторых библиотеках C/C++, таких как fcgi_stdio и т. Д. Но я хочу создать скрипт FastCGI, используя язык ассемблера, и нет таких библиотек.Приложение FastCGI - как получить ручку прослушивающего сокета?

Почти все, что связано с протоколом и коммуникацией, ясное, но я все еще не могу понять, как программа получает дескриптор прослушивающего сокета, передаваемого веб-сервером?

Мои выводы:

Я установил LightTPD сервер и попытался настроить его, чтобы получить Fastcgi работать с моими программами.

Но я был в замешательстве, что в конфигурационном файле нужны «хост» и «порт». Это означает, что FastCGI должен создать сам прослушивающий сокет? Я имею в виду использование функций socket/bind/listen/accept? Тогда как мое приложение будет знать эти параметры хоста и порта. Они находятся в файле конфигурации веб-сервера?

Другой способ lighttpd позволяет указать некоторый путь сокета-имени, например «/tmp/myapp.socket». Как мое приложение должно справиться с этим? И как он будет знать этот путь?

Я попытался сделать небольшую программу, используя accept (0, ...) как @ user58697, указанный в его ответе (и этот ответ соответствует официальной спецификации FastCGI!) К сожалению, ничего не произошло - вызов принять не удается несчастно!

Итак, является ли сообщение специфичным для сервера?

+0

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

+0

@JoachimPileborg Копание в тоннах исходного кода C, чтобы понять что-то, что, вероятно, очень просто, не очень хорошая идея ИМХО. – johnfound

+0

Я не смотрел на это очень много, но для меня это похоже на обычную связь сокетов, то есть всякий раз, когда сервер fcgi получает соединение с веб-сервера, стандартный [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

Смежные вопросы