Как обнаружить разъединение сокета?
Я реализовал задачу, используя шаблон асинхронных сокетов в Silverlight 3. Я начал с реализации Михаэля Шварца и основывался на ней. Таким образом, мое приложение Silverlight устанавливает постоянное сокетное соединение с устройством, а затем данные по мере необходимости передаются между устройством и приложением Silverlight.
Одна вещь, с которой я борюсь, это как обнаружить разрыв соединения. Я мог бы подумать о 2 подходах:
Keep-Alive. Я знаю, что это можно сделать на уровне сокетов, но я не уверен, как это сделать в асинхронной модели. Как бы класс Socket дал мне знать, что произошло отключение.
Руководство сохранить. По сути, приложение Silverlight отправляет фиктивный пакет каждые 20 секунд или около того. Если это не удастся, я бы предположил отключение. Однако невероятно, что SocketAsyncEventArgs.SocketError всегда сообщает об успехе, даже если я просто отключаю устройство, к которому подключено приложение Silverlight. Я не уверен, является ли это ошибкой или что мне нужно обновить до SL4.
Любые идеи, направления или реализации будут оценены.
1 ответ
Я закончил тем, что пошел с пакетом пульса, который требует ответа от цели. По сути, я отправляю предопределенный фиктивный пакет, и целевое устройство должно отвечать тем же, в противном случае соединение считается недействительным.