【问题标题】:Socket.Disconnect vs Socket.CloseSocket.Disconnect 与 Socket.Close
【发布时间】:2015-06-24 16:19:03
【问题描述】:

使用袜子时有什么区别以及我必须遵守哪些规则? 我正在编写简单的守护进程,它必须侦听端口并执行一些操作。

【问题讨论】:

  • 您是否检查了 MSDN 页面的两种方法?
  • 专业答案总是更好。也许我错过了什么?
  • 另请参阅有关清理 Socket 的正确方法:stackoverflow.com/a/62204814/222054

标签: c# sockets


【解决方案1】:

Socket.Close 调用Dispose(但它没有记录)。

使用面向连接的 Socket 时,始终在关闭 Socket 之前调用 Shutdown 方法。这确保了在连接的套接字关闭之前,所有数据都在连接的套接字上发送和接收。 (msdn)

你的代码应该是这样的(至少我会这样做):

using (var socket = new Socket())
{
    socket.Shutdown(SocketShutdown.Both);
    socket.Close();
}

Disconnect 方法采用单个参数 bool reuseSocket ,根据msdn

重用Socket 类型:System.Boolean 如果当前连接关闭后可以重用此套接字,则为 true;否则为假。

这基本上意味着,当您将reuseSocket 设置为false 时,它将在您关闭它后被处理掉。

Shutdown 方法不会断开您的套接字,它只会禁用发送/接收数据。

【讨论】:

    猜你喜欢
    • 2010-09-29
    • 2021-11-12
    • 2023-04-05
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多