Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Boost.Asio keep alive timeout 
V
    Опции темы
Леопольд
Дата 14.8.2011, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: нет
Всего: 13



Привет! Подскажите, пожалуйста, как воспользоваться keep-alive опцией со своим собственным таймаутом?
Может быть есть ещё какой-то способ периодически проверять состояние коннекшна, при этом не посылая данных на другой конец?

Это сообщение отредактировал(а) Леопольд - 14.8.2011, 20:27


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
boostcoder
Дата 14.8.2011, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



Цитата(Леопольд @  14.8.2011,  20:24 Найти цитируемый пост)
Подскажите, пожалуйста, как воспользоваться keep-alive опцией со своим собственным таймаутом?

средствами asio - никак.
вариант: получить натив-дексриптор, и при помощи API системы установить нужный таймаут.

Цитата(Леопольд @  14.8.2011,  20:24 Найти цитируемый пост)
Может быть есть ещё какой-то способ периодически проверять состояние коннекшна, при этом не посылая данных на другой конец?

да: таймер запускающий ассинхронную операцию чтения + null_buffers и в хэндлере проверяешь error_code.
PM WWW   Вверх
Леопольд
Дата 14.8.2011, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: нет
Всего: 13



boostcoder, не хочет работать под 1.42 бустом. Если null_buffers передавать то чтение всегда проходит успешно...
Решил так:
Код

                boost::asio::ip::tcp::socket::non_blocking_io nb(true);
                socket_.io_control(nb);

                ...

                boost::system::error_code error;
                char dummy;
                socket_.read_some(boost::asio::buffer(&dummy, 1), error);
                if(error == boost::asio::error::eof)
                {
                    socket_.close();
                    accept_();
                }


Это сообщение отредактировал(а) Леопольд - 15.8.2011, 11:01


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
boostcoder
Дата 15.8.2011, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



Цитата(Леопольд @  14.8.2011,  22:51 Найти цитируемый пост)
Если null_buffers передавать то чтение всегда проходит успешно...

а не должно.. smile 
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0523 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.