正在提取连接错误



我有一个名为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;
}

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

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

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

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

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

  • 远程端启动了一个正常的断开连接(即Read返回0)
  • 读/写引发带有SocketError.ConnectionAborted标志的SocketException
  • 读/写引发带有SocketError.NetworkReset标志的SocketException

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

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

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

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

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

我应该处理多少套接字错误情况?只有我期望遇到的人?还是全部?

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

最新更新