Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отловить FD_CLOSE при блокирующем режиме сокета 
:(
    Опции темы
ztlsk
Дата 18.9.2015, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.9.2015
Где: г.Челябинск

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



Есть связка программ клиент-сервер, все они используют блокирующий режим работы сокетов (обработка в главном потоке, ожидания в отдельных). Пока дело касалось работы в пределах одной локальной сети вопросов не возникало. Но с размещением клиентов на удаленные машины в интернете стали сыпаться ошибки 10053, 10054 всякий раз при попытке сервера послать запрос после паузы в несколько часов. В программах не существовало никаких механизмов типа Keep-Alive. 

Для эксперимента на клиенте активировал опцию сокета KEEPALIVE, выставил свои параметры (начинать отсыл не через 2 стандартных часа после последнего сеанса связи, а через 10 секунд), проверил сниффером - работает, приходит 1 байт примерно раз в 10сек. 
Следующим шагом хотел бы получать в главный поток программы сообщение FD_CLOSE при обнаружении модулем TCP разрыва соединения, но функция настройки таких оповещений WSAAsyncSelect автоматически переводит сокет в неблокирующий режим и программа в прежнем виде уже, естественно, не работает. Как поступить в такой ситуации? Можно ли не переводя программу на неблокирующие сокеты получать сообщения об обнаружении обрыва связи?

Это сообщение отредактировал(а) ztlsk - 18.9.2015, 09:20
PM MAIL   Вверх
leniviy
Дата 19.9.2015, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
ztlsk
Дата 2.10.2015, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.9.2015
Где: г.Челябинск

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



Цитата(leniviy @ 19.9.2015,  17:22)
Нужно, чтобы какой-нибудь тред постоянно читал из сокета. Тогда ему при обрыве сразу вернёт ошибку.

Этот ответ добавлен с нового Винграда - http://vingrad.com

Так в том и дело, что хочу использовать уже готовый заложенный механизм keep-alive, самостоятельную отсылку по таймеру каждые 5 минут я делал, это же не спортивно что ли. Только вот не нашел как сделать чтобы при блокирующих сокетах сообщения от keep-alive получать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




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


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

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