ПрограммированиеФорумОбщее

Проблема с io_service boost

#0
20:18, 7 дек 2016

Здравствуйте. Имеется следующий код из серверного плагина некоторой игры, взятый с инета исходником:

void Server::startAsync()
{
    unsigned short port = acceptor->local_endpoint().port();
    logprintf("*** Plugin: Started TCP server on port %d", port);
    io_service.reset();
    boost::system::error_code error;
    io_service.run(error);
    logprintf("*** Plugin: Stopped TCP server on port %d", port);
}

В консоли должно писать только ".. Started ..", но пишет и это, и ".. Stopped ..". Спрашивал на других форумах - говорят что в io_service нет задач, поэтому он завершается. Выводил error в консоль, там пишет число "6". Помогите разобраться здесь, в чем проблема? Уже много своих вещей сделал в этом проекте, а при проверке такая штука оказалась..

#1
21:34, 7 дек 2016

Vasiliy1301
Когда кончаются задачи - io_service::run() выходит.

Посмотри класс io_service::work.
Используется как раз для того, чтобы io_service::run() не выходил, когда нет задач.

Но судя по всему у тебя происходит какая-то ошибка, в этом случае run() тоже вылетает.
Читай официальную документацию или в самих исходниках посмотри что эта ошибка значит. Можешь использовать метод boost::system::error_code::message() чтобы посмотреть человеко-читаемое сообщение об ошибке.

#2
22:57, 7 дек 2016

Alexander K

Я вывел вот так:

  boost::system::error_code error;
  io_service.run(error);
  logprintf("ERROR: %s", error.message());

В консоли пишет "Неверный дескриптор". Вот скрин участка кода: http://imgdepo.com/id/i9986086. Пробовал менять еще местами эти строки:

{
  session->StartAsync(); //2
  startAccept(); //1
}

но никаких изменений.

#3
10:04, 8 дек 2016

Сначала делаешь ресет сервису, потом добавляешь задачи, потом run

#4
10:30, 8 дек 2016

denesik
> Сначала делаешь ресет сервису, потом добавляешь задачи, потом run
reset не влияет на задачи, можно сначала повесить задачи, потом reset + run.

Vasiliy1301
У тебя ошибка где-то в другом месте, например в startAccept'е.

#5
11:13, 8 дек 2016

Alexander K
>
> reset не влияет на задачи, можно сначала повесить задачи, потом reset + run.
мб, но точно помню там было не очень логично с этим.. лучше без ресета сделать рабочий вариант, а потом его пришаманивать

#6
12:29, 8 дек 2016

denesik
волнует 1 вопрос, какие задачи выполняются им, и какой можно в этом случае поставить?

Попробовал сделать вот такое, на сайте нашел:

+ Показать

итог - краш сервера. Оставлял только первые 2 строки с io_service srv - так же.

#7
22:21, 10 дек 2016

Ну помогите же мне пожалуйста, ребят(

#8
12:42, 11 дек 2016

Vasiliy1301
Надо не ныть, что ничего не получается, и не копировать втупую код из интернетов, а взять, спокойно прочитать документацию (у буста нормальная документация), потом взять дебаггер, пройтись им по коду, поглядеть что и как работает, и вот только после этого станет понятно в чем проблема. Бездумное копирование никогда не приведет к хорошему результату.

#9
16:14, 12 дек 2016

В документации к бусту есть отличный пример, компилишь его и изучаешь как работает.
Валидная ссылка на текущий момент:
http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp11/chat/

#10
2:00, 13 дек 2016

denesik
спасибо) буду смотреть.

ПрограммированиеФорумОбщее

Тема в архиве.