2013-10-20 60 views
0

我有一个异步套接字应用程序,我试图设置更好地处理异常。当套接字异常被捕获时,我关闭套接字并将它们带回“连接”屏幕,尝试重新连接套接字。问题是 - 当试图重新连接时,我得到一个当前套接字被丢弃的错误。无法访问处理的套接字

当我尝试重新连接时,有没有办法检查套接字是否被丢弃,如果是的话,重新实例化套接字?

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实例的异常将被抛出。

如果您打算断开插座,请仅使用Socket.Disconnect(reuseSocket: true)代替。

+0

谢谢,我认为这是我打算做的 – user547794