Возврат исключений сокета из драйвера устройства - PullRequest
3 голосов
/ 07 сентября 2011

У меня есть драйвер для удаленного устройства, и драйвер связывается с устройством через разъем.Драйвер имеет свойства, которые клиенты могут использовать для получения информации об устройстве.Каждое свойство использует частный метод чтения / записи драйвера для отправки запроса на устройство и ожидания ответа.

Я пытаюсь определить лучший способ обработки исключений сокетов.В частности, когда клиент использует одно из свойств для получения информации об устройстве, мне приходится перебрасывать исключения, возникающие в методе чтения / записи, иначе клиент получит значение по умолчанию, не зная, что что-то пошло не так.

Существуют ли шаблоны проектирования или общие подходы к этому типу проблемы?Кажется, немного утомительно обрабатывать исключения каждый раз, когда клиент использует свойства драйвера.Но опять же, единственное, что я вижу, - это наличие логического свойства HasError в драйвере.Это на самом деле просто косвенный обходной путь к фактическому выбрасыванию исключения и тому, чтобы клиент его перехватил.

1 Ответ

0 голосов
/ 07 сентября 2011

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

Например

try {
   tcpClient = new TcpClient(address.ToString(), port);
} catch (SocketException SE) {
   throw new MyDriverException("Failed to connect to remote device");
}

Конечно, вы можете добавить некоторые детали из SocketException к вашему собственному сообщению для целей отладки.

Исключения по-прежнему определенно подходят, но вы хотите датьклиент значимые сообщения в их контексте, а не в вашем.В конце концов, когда вы используете классы сокетов, вы получаете SocketExceptions: не исключения NDIS или что-то еще, что для вас ничего не значит.

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