Для написания FastCGI сервера на C или C++ нужен FastCGI Development Kit, который можно скачать с офицального сайта поддержки протокола FastCGI:
http://www.fastcgi.com/drupal/node/5
В Debian есть готовый пакет libfcgi-dev, в котором находятся те же самые заголовочные файлы, *.so и *.a и библиотеки.
Единственная тема на Linux.org.ru:
http://www.linux.org.ru/forum/development/4318578
Далее надо прочитать статью
Apache, fastcgi и c++: «Hello, world»
http://habrahabr.ru/blogs/cpp/61532/
В ней есть Hello Word. Програма запускается, начинает слушать 9000 порт и должна выдвать строку 'Hello Word' при любом запросе. (Получить ответ у меня на получилось, хотя соединение устанавливается).
#include <string>
#include "fcgi_stdio.h"
#include <stdlib.h>
#pragma comment(lib, "libfcgi.lib")
int main(int argc, char* const argv[] )
{
std::string port=":9000"; //Задаем номер порта TCP
int listenQueueBacklog = 400; //Глубина стека запросов
FCGX_Stream *in, *out, *err;
FCGX_ParamArray envp;
if(FCGX_Init()) exit(1); //Инициализируем библиотеку перед работой.
int listen_socket = FCGX_OpenSocket(port.c_str(), listenQueueBacklog); //Открываем новый слушающий сокет
if(listen_socket < 0) exit(1);
FCGX_Request request;
if(FCGX_InitRequest(&request, listen_socket, 0)) exit(1); //Инициализируем структуру запроса
while(FCGX_Accept_r(&request) == 0)
{
FCGX_FPrintF(request.out, "Content-type: text/html\r\n\r\n<TITLE>fastcgi</TITLE>\n<H1>Fastcgi: Hello world.</H1>\n");
FCGX_Finish_r(&request);//Завершаем запрос
}
return 0;
}
Обращение через curl:
$ curl -v 127.0.0.1:9000
* About to connect() to 127.0.0.1 port 9000 (#0)
* Trying 127.0.0.1... connected
* Connected to 127.0.0.1 (127.0.0.1) port 9000 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.18.2 (i486-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.8 libssh2/0.18
> Host: 127.0.0.1:9000
> Accept: */*
>
* Empty reply from server
* Connection #0 to host 127.0.0.1 left intact
curl: (52) Empty reply from server
* Closing connection #0
Но чтобы лучше понять, надо скачать FastCGI Development Kit, и скомпилировать пример эхо-сервера, который лежит в архиве в каталоге ./examples. Правда, его не получилось запустить, чтобы он слушал свой порт. Видимо, его должен запускать веб-сервер.