C#:关闭套接字时出错?
我正在尝试处理控制台应用程序,处理的一部分是关闭服务器套接字,但是当我尝试时,我得到了一个SocketException,我不确定为什么 System.Net.Sockets.SocketException:'发送或接收数据的请求 不允许,因为套接字未连接和(发送时) 在使用sendto调用的数据报套接字上)未提供地址'C#:关闭套接字时出错?,c#,.net,sockets,C#,.net,Sockets,我正在尝试处理控制台应用程序,处理的一部分是关闭服务器套接字,但是当我尝试时,我得到了一个SocketException,我不确定为什么 System.Net.Sockets.SocketException:'发送或接收数据的请求 不允许,因为套接字未连接和(发送时) 在使用sendto调用的数据报套接字上)未提供地址' 我在这里通过调用Socket.Shutdown来处理这个类,这就是抛出错误的地方 public void Dispose() { if (_serverSocket
我在这里通过调用Socket.Shutdown来处理这个类,这就是抛出错误的地方
public void Dispose()
{
if (_serverSocket == null)
{
return;
}
_serverSocket.Shutdown(SocketShutdown.Both);
_serverSocket.Close();
_serverSocket.Dispose();
}
因为
_serverSocket.Shutdown(SocketShutdown.Both);
_serverSocket.Close();
已断开连接,因此您不需要
\u serverSocket.Dispose()代码>不再错误信息对我来说非常清楚。你在理解什么方面有困难?如消息所示,套接字已断开连接,因此调用Shutdown()
是不合法的。如果没有可靠地重现问题的方法,就不可能说出您是如何陷入这种情况的,但不管怎样,您似乎只需要检查代码并决定是否真的应该调用Shutdown()
这里。您不应该在处理后将\u serverSocket
设置为null
,以防止处理两次吗?理想情况下,使用Interlocked.Exchange()
实现线程安全。但除此之外,我们还需要看到更多的类来提供帮助,因为似乎还有其他一些代码路径导致套接字关闭。