Мне нужно создать C++ FastCGI-сервер и подключиться к нему самым простым способом, чтобы протестировать/развиваться постепенно.
У меня есть оба вопроса концептуально и с отсутствием документации API для FastCGI. Я понимаю, что когда я это делаю
FCGX_Request request;
FCGX_Init();
FCGX_InitRequest(&request, 0, 0);
while (FCGX_Accept_r(&request) == 0) {
}
Это открывает сокет и прослушивает его для запросов. Затем, используя boost :: asio, я хочу сделать что-то вроде
boost::asio::io_service io_service;
boost::system::error_code error;
using boost::asio::ip::tcp;
tcp::resolver resolver(io_service);
tcp::resolver::query query("localhost", "" /* WTF are the params here? */);
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::socket socket(io_service);
boost::asio::connect(socket, endpoint_iterator);
while (true)
{
boost::array<char, 128> buf;
size_t len = socket.read_some(boost::asio::buffer(buf), error);
if (error)
break;
}
CPPUNIT_ASSERT_EQUAL(error, (boost::system::error_code)boost::asio::error::eof);
Т.е. программно отправлять запрос в процесс FastCGI для проверки его работоспособности.
В любом случае, я считаю, что tcp :: resolver :: query - это ключ к настройке связи из моего простого модульного теста.
Однако,
Возможно, я ошибаюсь, поэтому любые намеки на правильный подход к этому простому тестовому делу были бы с благодарностью приняты. Кроме того, если кто-нибудь знает, где, черт возьми, API-документация для fcgi/fcgi++/fastcgi ++, это было бы потрясающе.
Ваш вопрос действительно касается только элементарных сетей.
Редактировать Проверьте этот наиболее ценный интернет-ресурс по сетевому программированию (основы для продвинутых):
Сокет - это соединение. Сервер прослушивает /port/(TCP или UDP. Предполагая TCP для остальных, поскольку вы выполняете CGI).
Клиенты подключаются к порту, и сервер accept
соединение, что приводит к сокету (двунаправленный поток, так сказать). Клиент теперь (обычно) send
и сервер receive
запрос. Затем сервер send
ответ. (Соединение может быть закрыто или сохранено в зависимости от протокола/предпочтений).
Конкретные ответы:
query("localhost", "http");
в конечном итоге будет подключаться к порту 80 на большинстве систем.
Конечно, вы также можете просто указать номер порта:
query("localhost", "8080");
Выберите номер порта, на который сервер связывает его слушателем.