![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
RankoR |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 6.8.2009 Где: Dolgoprudny Репутация: нет Всего: нет |
Есть сокет, нужно быстро определить, подключен ли он в данный момент. В фреймворках вроде Qt, к примеру, есть сигналы onDisconnected, которые умеют быстро сообщать о дисконнекте удаленного хоста. Сейчас же понадобилось написать приложение на C, соответственно, фреймворки использовать нельзя. Как это сделать?
В гугле рабочего кода не нашел =( |
|||
|
||||
Artemon |
|
|||
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Достоверный способ узнать о разрыве это переодически обмениваться сообщениями (ping)
-------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
RankoR |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 6.8.2009 Где: Dolgoprudny Репутация: нет Всего: нет |
Ну вообще-то отсутствие пинга не говорит об отсутствии связи ;)
|
|||
|
||||
RankoR |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 6.8.2009 Где: Dolgoprudny Репутация: нет Всего: нет |
Хотелось бы максимально достоверный способ - сервер будет очень сильно нагружен, и нужно быстро определять, что клиент отключился.
|
|||
|
||||
Artemon |
|
|||
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Я под пингом имею ввиду отправку контрольных сообщений между клиентским и серверным сокетом. НО никак не стандартную утилиту Windows под названием Ping Это сообщение отредактировал(а) Artemon - 11.12.2010, 11:45 -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
RankoR |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 6.8.2009 Где: Dolgoprudny Репутация: нет Всего: нет |
А я под пингом всегда подразумевал ICMP-echo =)
Дело в том, что отправить "лишний" пакет нельзя - клиент просто не поймет его, и получится ошибочка =( А если вызывать recv() - он долго не возвращает управление, что не есть хорошо. |
|||
|
||||
Artemon |
|
|||
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Нужно сделать чтобы клиент понял его.
-------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
Олег2005 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Используйте опцию TCP_KEEPALIVE
|
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: нет Всего: 39 |
если recv() вернул 0 то клиент отключился
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |