FastCGI через C: FCGX_Accept_r иногда выполняет «Сброс соединения ...» - PullRequest
0 голосов
/ 13 ноября 2018

У меня однопоточный FastCGI "Hello, World!" приложение, есть код:

error = FCGX_Init();
// error handling

socket_descriptor = FCGX_OpenSocket("127.0.0.1:1500", 5);
// error handling

error = FCGX_InitRequest(&request, socket_descriptor, 0);
// error handling

std::cout << "Awaiting connect...";
bytes_accepted = FCGX_Accept_r(&request);
// error handling
std::cout << "OK!" << std::endl;

FCGX_PutS("<title>Hello!</title>\r\n", request.out)

FCGX_Finish_r(&request);

Когда я запускаю этот код, открываю браузер и выполняю «127.0.0.1:1500», браузер говорит «Сброс соединения» и код не выводит ничего похожего на «ОК», FCGX_Accept_r, кажется, зависает.

Я попытался открыть соответствующий порт на Debian 9 x64 с помощью iptables:

iptables -A INPUT -i eth0 -p tcp --destination-port 1500 -j ACCEPT
iptables-save

но это не вызывает никакого эффекта.

Что я делаю не так?

1 Ответ

0 голосов
/ 13 ноября 2018

Когда вы не указываете схему в URL-адресе, а порт не относится к какому-либо конкретному протоколу, который понимает браузер, поэтому браузер примет http: // (или, может быть, https в эти дни?).Вместо этого ваша программа ожидает fastcgi, который является другим протоколом, а библиотека не понимает HTTP.Вероятно, запрос никогда не будет принят.

Fastcgi - это протокол для связи с веб-сервером.Вам необходимо использовать веб-сервер, который принимает запросы http и передает эти запросы по протоколу fastcgi.Например, nginx поддерживает протокол.

...