Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > fastcgi клиент с несколькими сокетами


Автор: neyrox 5.12.2011, 13:47
Просьба помочь в следующей проблеме:

При создании нескольких сокетов на разные порты для приема fastcgi запросов работает только сокет на последний порт.
Проблема проявляется только под Windows. Под linux работают все порты.

Использую библиотеку libfcgi 2.4.0 http://www.fastcgi.com/drupal/

Схема обращений к библиотеке следующая:

Код


typedef boost::shared_ptr<FCGX_Request> request_ptr;

class dispatcher
{
public:
  dispatcher(request_ptr request_source)
    : request(request_source)
  {
  }

  void operator()()
  {
    while (FCGX_Accept_r(request.get()) == 0)
    {
      //...

      FCGX_SetExitStatus(200, request->out);

      FCGX_Finish_r(request.get());
    }
  }

private:
   request_ptr request;
};

int main()
{
  FCGX_Init();

  boost::thread_group listen_threads;

  for(int port = 2001; port != 2004; ++port)
  {
    const std::string port_str(boost::str(boost::format(":%1%") % port));
    const int listen_socket = FCGX_OpenSocket(port_str.c_str(), 500);

    request_ptr new_request(new FCGX_Request());
    FCGX_InitRequest(new_request.get(), listen_socket, 0);

    listen_threads.create_thread(dispatcher(new_request));
  }

  listen_threads.join_all();

  return 0;
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)