crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Не получается отследить потерю связи по сети. Linux, сокеты.
demon051
  опции профиля:
сообщение 25.7.2018, 16:45
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 12.8.2014
Пользователь №: 4209

Спасибо сказали: 4 раз(а)




Репутация:   0  


Всем привет.
Работаю с неблокирующими сокетами под Linux.

Не получается отследить ситуацию потери сети. Т.е., например, вынули разъем из сетевой карты.

метод
select(ss[0]+1, &read_fs, &write_fs, &error_fs, &rwe_timeout);

в этом случае сообщает всё время, что для записи готов дескриптор write_fs
результат вызова select = 1

в итоге не могу поймать переподключение клиента после восстановления связи по сети, т.к. всё время кручусь в цикле опроса дескрипторов и повода для выхода из него нет...

Что делаю не так?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 28.7.2018, 2:07
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1570
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 218 раз(а)




Репутация:   12  


доступность сокета для записи будет постоянной, потому что система буферизует вывод.а таймаут на TCP-сессии очень большой и если даже сеть временно отваливается, это не значит, что сессия сдохла.

по идее, отпадение клиента обычно проверяют отправкой каких-то сообщений, на которые клиент должен отвечать. либо ставить таймауты на ответ клиента: если клиент долгое время не подаёт признаков жизни, то закрывать сессию и пусть переподключается.

теоретически, можно заюзать SO_KEEPALIVE, но в стандартных настройках таймаут равен двум часам, так что сессия висит долго и этот метод малоэффективен, если не дёргать системные настройки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.8.2018, 7:35