socket 异常类型
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
/// <summary>
/// 根据错误号作出处理
/// </summary>
/// <param name="error"></param>
/// <param name="client"></param>
private void CatchWithSocketError(SocketError error, ServerMessage client)
{
#region 各种错误号
//AccessDenied已试图通过被其访问权限禁止的方式访问 Socket。
//ConnectionAborted此连接由 .NET Framework 或基础套接字提供程序中止。
// Disconnecting正常关机正在进行中。
//Fault 基础套接字提供程序检测到无效的指针地址。
//HostDown 由于远程主机被关闭,操作失败。
//HostNotFound 无法识别这种主机。该名称不是正式的主机名或别名。
//HostUnreachable 没有到指定主机的网络路由。
//InProgress 阻止操作正在进行中。
//Interrupted 已取消阻止 Socket 调用的操作。
//InvalidArgument 给 Socket 成员提供了一个无效参数。
//IOPending 应用程序已启动一个无法立即完成的重叠操作。
//IsConnected Socket 已连接。
//MessageSize 数据报太长。
//NetworkDown 网络不可用。
//NetworkReset 应用程序试图在已超时的连接上设置 KeepAlive。
//NetworkUnreachable 不存在到远程主机的路由。
//NoBufferSpaceAvailable 没有可用于 Socket 操作的可用缓冲区空间。
//NoData 在名称服务器上找不到请求的名称或 IP 地址。
//NoRecovery 错误不可恢复或找不到请求的数据库。
//NotConnected 应用程序试图发送或接收数据,但是 Socket 未连接。
//NotInitialized 尚未初始化基础套接字提供程序。
//NotSocket 对非套接字尝试 Socket 操作。
//OperationAborted 由于 Socket 已关闭,重叠的操作被中止。
//OperationNotSupported 协议族不支持地址族。
//ProcessLimit 正在使用基础套接字提供程序的进程过多。
//ProtocolFamilyNotSupported 未实现或未配置协议族。
//ProtocolNotSupported 未实现或未配置协议。
//ProtocolOption 对 Socket 使用了未知、无效或不受支持的选项或级别。
//ProtocolType 此 Socket 的协议类型不正确。
//Shutdown 发送或接收数据的请求未得到允许,因为 Socket 已被关闭。
//SocketError 发生了未指定的 Socket 错误。
//SocketNotSupported 在此地址族中不存在对指定的套接字类型的支持。
//Success Socket 操作成功。
//SystemNotReady 网络子系统不可用。
//TimedOut 连接尝试超时,或者连接的主机没有响应。
//TooManyOpenSockets 基础套接字提供程序中打开的套接字太多。
//TryAgain 无法解析主机名。请稍后重试。
//TypeNotFound 未找到指定的类。
//VersionNotSupported 基础套接字提供程序的版本超出范围。
//WouldBlock 对非阻止性套接字的操作不能立即完成。
#endregion
if (error == SocketError.Disconnecting || error == SocketError.Fault || error == SocketError.IsConnected || error == SocketError.SocketError)
{
client.Socket.Close();
ui.Post(this.uiDisPlay.delUser, client);
}
if (error == SocketError.MessageSize || error == SocketError.NotConnected || error == SocketError.ProcessLimit || error == SocketError.TooManyOpenSockets)
{
client.Socket.Close();
ui.Post(this.uiDisPlay.delUser, client);
}
}
/// 根据错误号作出处理
/// </summary>
/// <param name="error"></param>
/// <param name="client"></param>
private void CatchWithSocketError(SocketError error, ServerMessage client)
{
#region 各种错误号
//AccessDenied已试图通过被其访问权限禁止的方式访问 Socket。
//ConnectionAborted此连接由 .NET Framework 或基础套接字提供程序中止。
// Disconnecting正常关机正在进行中。
//Fault 基础套接字提供程序检测到无效的指针地址。
//HostDown 由于远程主机被关闭,操作失败。
//HostNotFound 无法识别这种主机。该名称不是正式的主机名或别名。
//HostUnreachable 没有到指定主机的网络路由。
//InProgress 阻止操作正在进行中。
//Interrupted 已取消阻止 Socket 调用的操作。
//InvalidArgument 给 Socket 成员提供了一个无效参数。
//IOPending 应用程序已启动一个无法立即完成的重叠操作。
//IsConnected Socket 已连接。
//MessageSize 数据报太长。
//NetworkDown 网络不可用。
//NetworkReset 应用程序试图在已超时的连接上设置 KeepAlive。
//NetworkUnreachable 不存在到远程主机的路由。
//NoBufferSpaceAvailable 没有可用于 Socket 操作的可用缓冲区空间。
//NoData 在名称服务器上找不到请求的名称或 IP 地址。
//NoRecovery 错误不可恢复或找不到请求的数据库。
//NotConnected 应用程序试图发送或接收数据,但是 Socket 未连接。
//NotInitialized 尚未初始化基础套接字提供程序。
//NotSocket 对非套接字尝试 Socket 操作。
//OperationAborted 由于 Socket 已关闭,重叠的操作被中止。
//OperationNotSupported 协议族不支持地址族。
//ProcessLimit 正在使用基础套接字提供程序的进程过多。
//ProtocolFamilyNotSupported 未实现或未配置协议族。
//ProtocolNotSupported 未实现或未配置协议。
//ProtocolOption 对 Socket 使用了未知、无效或不受支持的选项或级别。
//ProtocolType 此 Socket 的协议类型不正确。
//Shutdown 发送或接收数据的请求未得到允许,因为 Socket 已被关闭。
//SocketError 发生了未指定的 Socket 错误。
//SocketNotSupported 在此地址族中不存在对指定的套接字类型的支持。
//Success Socket 操作成功。
//SystemNotReady 网络子系统不可用。
//TimedOut 连接尝试超时,或者连接的主机没有响应。
//TooManyOpenSockets 基础套接字提供程序中打开的套接字太多。
//TryAgain 无法解析主机名。请稍后重试。
//TypeNotFound 未找到指定的类。
//VersionNotSupported 基础套接字提供程序的版本超出范围。
//WouldBlock 对非阻止性套接字的操作不能立即完成。
#endregion
if (error == SocketError.Disconnecting || error == SocketError.Fault || error == SocketError.IsConnected || error == SocketError.SocketError)
{
client.Socket.Close();
ui.Post(this.uiDisPlay.delUser, client);
}
if (error == SocketError.MessageSize || error == SocketError.NotConnected || error == SocketError.ProcessLimit || error == SocketError.TooManyOpenSockets)
{
client.Socket.Close();
ui.Post(this.uiDisPlay.delUser, client);
}
}