正确的方法来停止侦听Socket

Ant*_*ton 19 c# sockets

我有一个侦听套接字连接的服务器:

public class Server
{
    private Socket _serverSocket;

    public Server()
    {
        _serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        _serverSocket.Bind(new IPEndPoint(IPAddress.Any, 1234));
        _serverSocket.Listen(1);
    }

    public void Start()
    {
        _serverSocket.BeginAccept(HandleAsyncConnectionMethod, null);
    }

    public void Stop()
    {
        //????? MAGIC ?????
    }

    //... rest of code here
}
Run Code Online (Sandbox Code Playgroud)

关闭插座的正确(干净)方法是什么?

打电话是否足够:

_serverSocket.Disconnect(true);
Run Code Online (Sandbox Code Playgroud)

在Stop()方法?或者还有其他工作需要干净地关闭连接吗?

小智 4

TCP 连接终止正确涉及四次握手。您希望两端通知对方他们正在关闭,然后确认对方已关闭。

维基百科解释了该过程:http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_termination

这篇文章解释了如何在 C# 中实现它:http://vadmyst.blogspot.com/2008/04/proper-way-to-close-tcp-socket.html

  • -1:执行接受(即等待新连接)的套接字现在与连接到客户端的套接字相同(其中“断开连接”或“关闭”之一是正确的答案)。 (7认同)
  • @Richard:由于您似乎了解哪些情况需要采取某些行动,也许您可​​以分享一个答案,而不是仅仅对其他人进行否决。尽管是一篇较旧的帖子,但我相信社区会很感激它,因为对这个问题有很多看法(我就是其中之一)。 (5认同)