从设备驱动程序重新抛出套接字异常

本文关键字:套接字 异常 新抛出 设备驱动程序 | 更新日期: 2023-09-27 18:07:40

我有一个远程设备的驱动程序,该驱动程序通过套接字与设备通信。驱动程序具有客户端可以用来获取设备信息的属性。每个属性都使用驱动程序的私有读/写方法向设备发送查询并等待响应。

我正在尝试确定处理套接字异常的最佳方法。具体来说,当客户端使用其中一个属性来获取有关设备的信息时,我必须重新抛出在读/写方法中发生的异常,否则,客户端将接收默认值,而不知道出了什么问题。

对于这类问题有什么设计模式或通用方法吗?在客户端使用驱动程序属性时处理异常似乎有点乏味。但话又说回来,我看到的唯一工作是在驱动程序上有一个布尔HasError属性。这实际上只是一个间接的解决方法,实际抛出一个异常,并让客户端捕获它。

从设备驱动程序重新抛出套接字异常

您应该解释套接字异常,并为客户端重新抛出一些更有信息的东西:他们不希望不得不考虑套接字问题。如果你的异常不能很好地映射到任何现有的异常,创建你自己的异常类型,并返回信息性消息,如"网络连接有问题",而不是像"套接字读取错误"。

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

你当然可以从SocketException中添加一些细节到你自己的消息中用于调试。

异常仍然是绝对要走的路,但你想给你的客户有意义的消息,在他们的上下文中,而不是你的。毕竟,当您使用套接字类时,您会得到socketexception:而不是NDIS异常或其他任何异常,这对您来说没有任何意义。