Как отловить событие отключения? - PullRequest
0 голосов
/ 11 февраля 2011

Я настоящий нуб в C. Я пытаюсь разработать свой собственный сервер блокировки на C (просто для практики).И у меня вопрос ... Давайте представим, что у нас есть сервер, написанный на C, у нас есть удаленный хост, подключенный к этому серверу через сокет.Когда соединение инициируется - мой сервер создал указатель в памяти.Можно ли удалить этот указатель, когда удаленный хост отключен?Как я могу поймать событие отключения?

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 февраля 2011

В реальном сценарии io вы не можете действительно обнаружить отключение.Вместо этого вы должны:

  1. Получить пакет, который указывает, что другая сторона намеревается отключиться.
  2. Попытка передать пакет, который не будет доставлен из-за изменений в соединении во время соединения.«молчаливый» период между сеансами связи.

Это означает, что системы, которые «должны» обеспечивать связь, обычно отправляют и получают периодические «фиктивные» сообщения, чтобы обнаружить потерю соединения раньше, чем оно будет обнаружено ».обычный «трафик в одиночку».

В зависимости от вашего приложения издержки сообщений поддержки активности могут не стоить усилий.

«Соединение», которое вы имеете на своей стороне сети, действительнопросто набор структур данных, которые позволяют передавать и получать.Нижний уровень «IP» «TCP / IP» не требует подключения, это означает, что вы не будете знать, доступно ли ваше смоделированное «подключение», пока вы не попытаетесь его использовать (или не получите пакет, явно сообщающий вам, что другой конец не будет обрабатыватьсябольше данных).

0 голосов
/ 11 февраля 2011

Системный вызов read(2) вернет ноль, когда другой конец сокета закроет соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...