我有一个异步套接字应用程序,我正在尝试设置以更好地处理异常。当捕获到套接字异常时,我关闭套接字并将它们带回“连接”屏幕,在那里它尝试重新连接套接字。问题是 - 当尝试重新连接时,我收到一个错误,表示当前套接字已被丢弃。
当我尝试重新连接时,有没有办法检查套接字是否已被丢弃,如果是这样重新实例化套接字?
catch (Exception e)
{
ShutDownAfterException();
Console.WriteLine(e.ToString());
Console.WriteLine("From ReceiveCallback");
}
private void ShutDownAfterException()
{
Client.Shutdown(SocketShutdown.Both);
Client.Close();
Client = null;
Stop();
Application.Current.Dispatcher.BeginInvoke(
DispatcherPriority.Background,
new Action(() => Messenger.Default.Send<NavigateMessage>(new NavigateMessage(ConnectViewModel.ViewName, this))));
}
答案 0 :(得分:1)
Socket.Close
方法实际上将断开和处理套接字,这意味着当您下次访问套接字实例时,将抛出异常。
如果您打算断开套接字,请仅使用Socket.Disconnect(reuseSocket: true)
。