Закройте незанятый сокет на сервере - PullRequest
0 голосов
/ 03 января 2011

Привет
Я хотел бы закрыть соединение на сервере, что клиент отключен от серверного приложения, но соединение остается открытым. Есть ли способ? любой фрагмент кода C #?

Спасибо

Ответы [ 2 ]

3 голосов
/ 03 января 2011

Если клиент отключается корректно, вы получите 0-байтовое чтение из EndReceive.Затем вы можете закрыть сокет.

Если соединение разорвано, вам понадобится способ его обнаружить.Вам необходимо отправить данные через сокет, чтобы определить, когда другая сторона отключилась.Это приведет к возникновению исключения при следующей операции с сокетом (например, EndReceive), и вы сможете закрыть сокет.

У меня есть более подробное объяснение в моей записи блога ОбнаружениеПолуоткрытые (отброшенные) соединения .

1 голос
/ 03 января 2011

Розетки должны быть закрыты, когда:

  1. Исключение выдается для любого из методов сокета.
  2. Receive / EndReceive возвращает 0 байтов
  3. Send / EndSend возвращает 0 байтов.

Просто используйте socket.Close() в таких случаях.

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