1

我有一个名为 IConnection 的接口

public interface IConnection
{

    bool IsConnected { get; }
    Task ConnectAsync(IEndPoint remoteEP);
    Task<int> SendAsync(byte[] data, int offset, int size);
    Task<int> ReceiveAsync(byte[] buffer, int offset, int size);
    void Disconnect();
    void Close();

    event EventHandler<DisconnectedEventArgs> Disconnected;

}

它由两种不同类型的连接实现——基于 Socket 的连接类和基于 HTTP 的连接类。我还希望将来可以选择添加其他连接类型。

在我的主 ChatClient 类中启动连接时,我将检查用户的配置,然后根据用户的喜好,创建一个 SocketConnection 或一个 HTTPConnection。从那时起,我只指使用它的 IConnection 接口的连接。

IConnection 类有一个 Disconnected 事件,当用户调用 Disconnect 或发生某些意外连接错误时会引发该事件。DisconnectedEventArgs 将包含有关导致断开连接发生的原因的信息。

我想知道的是,我如何抽象不同类型的错误?

套接字可能会遇到许多不同的错误情况,这会导致它断开连接,包括但不限于 -

  • 远程端发起了一个优雅的断开连接(即..读取返回 0)
  • 读/写抛出带有标志 SocketError.ConnectionAborted 的 SocketException
  • 读/写抛出带有标志 SocketError.NetworkReset 的 SocketException

http 连接也可能会遇到许多不同的错误情况,例如 -

  • 轮询远程服务器失败 - 例如..主机突然消失
  • HTTP 身份验证凭据被拒绝

如何将套接字的所有可能错误和 http 连接的所有可能错误组合成一个类型?

我是否使用包含所有可能错误的值的枚举?

我有简单的错误代码和错误描述吗?

我应该处理多少个套接字错误条件?只有我希望遇到的那些?还是全部?

4

1 回答 1

1

为什么不DisconnectEventArgs包含一个public Exception Error { get; set; }. Error正常调用时为null Disconnect,否则包含Socket或Http异常。

于 2013-02-08T21:33:17.233 回答