Все примеры для темы основаны на некоторых библиотеках C/C++, таких как fcgi_stdio и т. Д. Но я хочу создать скрипт FastCGI, используя язык ассемблера, и нет таких библиотек.Приложение FastCGI - как получить ручку прослушивающего сокета?
Почти все, что связано с протоколом и коммуникацией, ясное, но я все еще не могу понять, как программа получает дескриптор прослушивающего сокета, передаваемого веб-сервером?
Мои выводы:
Я установил LightTPD сервер и попытался настроить его, чтобы получить Fastcgi работать с моими программами.
Но я был в замешательстве, что в конфигурационном файле нужны «хост» и «порт». Это означает, что FastCGI должен создать сам прослушивающий сокет? Я имею в виду использование функций socket/bind/listen/accept? Тогда как мое приложение будет знать эти параметры хоста и порта. Они находятся в файле конфигурации веб-сервера?
Другой способ lighttpd позволяет указать некоторый путь сокета-имени, например «/tmp/myapp.socket». Как мое приложение должно справиться с этим? И как он будет знать этот путь?
Я попытался сделать небольшую программу, используя accept (0, ...) как @ user58697, указанный в его ответе (и этот ответ соответствует официальной спецификации FastCGI!) К сожалению, ничего не произошло - вызов принять не удается несчастно!
Итак, является ли сообщение специфичным для сервера?
Я бы предположил, что существует хотя бы одна реализация с открытым исходным кодом, которую вы можете использовать в качестве ссылки. –
@JoachimPileborg Копание в тоннах исходного кода C, чтобы понять что-то, что, вероятно, очень просто, не очень хорошая идея ИМХО. – johnfound
Я не смотрел на это очень много, но для меня это похоже на обычную связь сокетов, то есть всякий раз, когда сервер fcgi получает соединение с веб-сервера, стандартный [accept()] (http: //linux.die. net/man/3/accept) вызов вернет новый сокет. – Jester