c# - 停止监听套接字的正确方法

标签 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
}

关闭套接字的正确(干净)方法是什么?

调用是否足够:

_serverSocket.Disconnect(true);

在 Stop() 方法中?或者是否需要进行其他工作才能彻底关闭连接?

最佳答案

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

关于c# - 停止监听套接字的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/452327/

相关文章:

c# - 如何从十进制数中获取格雷码

c# - 流读取问题

c# - 使用查询字符串参数消除 UriTemplate 匹配项的歧义

c# - 是否有 "database"类对象的标准数据结构?

c++ - 如何通过 TCP 套接字发送 int16_t?

c - Linux TCP/IP 诊断 C 程序中 TCP/IP read() 返回 0 的原因

javascript - Node.js、Socket.io : How to get client browser-language?

c# - 下载文件并自动保存到文件夹

c - 带有空 fd 集的套接字选择

Python 套接字 - "blocking"套接字操作到底是什么?