对.Net套接字生命周期感到困惑
我对.Net套接字的生命周期感到困惑,尤其是在即将结束的时候。根据MSDN,插座可以进行连接、断开、关闭、关闭和完成。但我有点困惑,我什么时候会选择执行这些操作,哪些发送FIN,哪些发送RST,哪些阻止新事件调用我的事件处理程序,等等。此外,由于Close释放了套接字的资源,我什么时候需要单独执行Finalize 提出我的问题是因为我一直在做对.Net套接字生命周期感到困惑,.net,sockets,.net,Sockets,我对.Net套接字的生命周期感到困惑,尤其是在即将结束的时候。根据MSDN,插座可以进行连接、断开、关闭、关闭和完成。但我有点困惑,我什么时候会选择执行这些操作,哪些发送FIN,哪些发送RST,哪些阻止新事件调用我的事件处理程序,等等。此外,由于Close释放了套接字的资源,我什么时候需要单独执行Finalize 提出我的问题是因为我一直在做 if (_TCPConn.Connected) { _TCPConn.Shutdown(SocketShutd
if (_TCPConn.Connected)
{
_TCPConn.Shutdown(SocketShutdown.Both);
_TCPConn.Disconnect(true);
}
_TCPConn是我的插座,当我断开连接时,我得到了
不允许发送或接收数据的请求,因为套接字
之前的一次关闭已经在该方向关闭
召唤
…在我的事件处理程序中,因为数据仍然异步传入并触发处理程序。完成关闭似乎是解决这个问题的方法。但就在那时,我意识到我需要更好地理解这一点。另外,从这些不同的停止插座的方法中,有哪些对称的方法使插座恢复活力
如果有人能指出一篇描述.Net套接字生命周期的好文章或资源,这将是对这个问题的一个很好的回答。您在这里混淆了一些东西。BegindConnect是异步的,不会阻止断开连接的线程版本。因此,使用哪一个取决于在断开连接完成之前是否可以阻塞线程 在调用close之前,必须在面向连接的套接字上调用Shutdown。在非面向连接的套接字上似乎不需要它 关闭和处置是等效的。当您不再需要套接字并且可以释放它所拥有的资源时,您应该调用其中一个 你从不打电话;如果您没有正确地处理套接字,GC将完成此操作。但这并不是套接字所独有的,任何实现IDisposable函数的方法都是一样的。MS还建议创建一个名为Close的方法,如果该方法比Dispose更直观,那么可以打开文件和套接字,因此关闭它们是有意义的。然而,随着using语句的添加,我很少再使用显式Close方法了 我建议你多读一些关于使用的知识 我不确定是否有任何东西会发送重置;我认为FIN将被关闭/处置