首页 文章

TcpClient重置与正常关机

提问于
浏览
2

当我想删除已被调用的客户端's connection to my server. My understanding is that Close will call Shutdown on the socket if it hasn'时,我正在使用TcpClient并调用Close .

任何人都可以解释下面的上下文中“终止”的含义吗?根据我的观察,这意味着调用Shutdown的一方将发送硬重置(RST)而不是通过正常关闭序列(FIN,ACK ...) .

来自:https://msdn.microsoft.com/en-us/library/system.net.sockets.socket.shutdown(v=vs.110).aspx

设置接收方式指定不允许后续调用Receive . 这对较低的协议层没有影响 . 如果使用面向连接的协议,如果在调用Shutdown之后存在以下任一条件,则终止连接:数据位于等待接收的传入网络缓冲区中 . 更多数据已经到来 .

基于此,如果我想进行正常关闭,我必须在调用Close之前尝试清空本地接收缓冲区 .

这是正确的还是有办法保证正常关机?

1 回答

  • 2

    通过首先关闭输出通道 socket.Shutdown(SocketShutdown.Send)) 来完成正常关闭,并继续读取套接字 .

    另一方将读取您的关闭请求作为0字节消息,并在发送所有剩余数据后,它应通过关闭其套接字来响应 . 这会导致您的一方收到0字节的消息,从而结束交易 .

相关问题