MyTetra Share
Делитесь знаниями!
Как сделать FastCGI сервер на C/C++
Время создания: 27.11.2010 01:15
Автор: xintrea
Раздел: Компьютер - Программирование - Язык C++ (Си++)
Запись: xintrea/mytetra_syncro/master/base/0000003324/text.html на raw.github.com

Для написания 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. Правда, его не получилось запустить, чтобы он слушал свой порт. Видимо, его должен запускать веб-сервер.

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования