套接字处于Sent / Recv状态

时间:2014-11-03 03:21:04

标签: c# sockets tcp

我最近偶然发现了一个非常奇怪的错误。我首先认为这是我的代码中的错误,但是现在我可以看到这是系统范围的事情,说过,我认为我的问题最合适。

我看到我的网络库非常奇怪的行为,当我开始调试时,我发现如果我将连接到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 s然后将挂起3个套接字:监听套接字(在监听状态下绑定到0.0.0.0:54000和2个套接字,一个卡在SYN_RCVD中, SYN_SENT中的另一个)。我尝试在不同的机器上运行,代码运行正常,然后我在我的“损坏”机器上的Linux VM上尝试了它,它仍然运行正常。

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

0 个答案:

没有答案