C# 插座卡在发送/接收状态

C# 插座卡在发送/接收状态,c#,sockets,tcp,C#,Sockets,Tcp,我最近偶然发现了一只非常奇怪的虫子。我最初认为这是我代码中的错误,但现在我可以看到这是系统范围内的问题,尽管如此,我认为我的问题非常适合 我看到我的网络库出现了非常奇怪的行为,当我开始调试时,我发现如果我连接到tcp套接字,最常见的情况是——在我开始侦听后不久,我的套接字将陷入SYN_RCVD和SYN_SENT状态。经过更多的调试后,我完全放弃了所有代码,剩下的是: while (true) { TcpListener listener = new TcpListener(54000);

我最近偶然发现了一只非常奇怪的虫子。我最初认为这是我代码中的错误,但现在我可以看到这是系统范围内的问题,尽管如此,我认为我的问题非常适合

我看到我的网络库出现了非常奇怪的行为,当我开始调试时,我发现如果我连接到tcp套接字,最常见的情况是——在我开始侦听后不久,我的套接字将陷入SYN_RCVD和SYN_SENT状态。经过更多的调试后,我完全放弃了所有代码,剩下的是:

while (true)
{
    TcpListener listener = new TcpListener(54000);
    listener.Start();
    var c = listener.AcceptTcpClientAsync();
    TcpClient client = new TcpClient();
    client.Connect(new IPEndPoint(IPAddress.Loopback, 54000));

    c.Result.Close();
    client.Close();
    listener.Stop();
    Console.WriteLine("done");
}
上面的类是System.Net.sockets1,不是我的

在我的机器上,此代码将生成1-5个done,然后将与3个套接字挂起:侦听套接字绑定到侦听状态下的0.0.0.0:54000和2个套接字,一个卡在SYN_RCVD中,另一个在SYN_SENT中。我在不同的机器上试过,代码运行正常,然后在我的“坏”机器上的Linux虚拟机上试过,它仍然运行正常


Node.js中的类似代码也会被卡住。

可能是防火墙配置不正确吗?@JonathonReinhart On localhost?我认为它会更二进制,不管是否有效,这里我有相当随机的崩溃。我开始删除所有的网络驱动程序,如Check Point vpn、更新的驱动程序、重新启动的计算机,奇怪的是,有时它工作,有时不工作。我开始认为它可能与vpn有关。上面的代码似乎不太合理。当您尝试创建新的侦听器时,不能保证以前的连接将被完全断开。反复关闭和重新打开同一个端口是不明智的。@DavidSchwartz我考虑过了,但是:在最初的代码中,我尝试了更明智的关闭,这是一个完全简单化的例子,但是:如果问题在于未关闭的侦听套接字,那么在创建新端口时是否应该收到错误?一个端口已被使用。相反,我成功创建了侦听器,是连接崩溃了。第2点-此错误有时发生在第一个循环中,因此资源管理不是问题,因为在我第一次关闭套接字之前,它们的连接可能会挂起。@MarcinDeptuła崩溃是什么意思?连接如何崩溃?