发送消息保证后,是否与TCP套接字断开连接?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了发送消息保证后,是否与TCP套接字断开连接?相关的知识,希望对你有一定的参考价值。

我找不到很多关于此的信息,但我有一个简单的代码序列,如:

// does it wait on Write() until successful handshake or attempt failure
// or just continue on straight away?
net.conn.Write(buffer[1:60])
conn.Close()

这是否保证在调用Close之前传递给客户端/服务器?或者在发送消息后调用Close,并且如果它们太慢而无法及时完成,可能会在握手期间关闭连接?

答案

这是否保证在调用Close之前传递给客户端/服务器?

没有。

或者在发送消息后调用Close

write和close都排队等待异步执行。

如果它们太慢而无法及时完成,可能会在握手过程中关闭连接?

Close将排队等待连接。如果紧密握手花费的时间太长,则会重置连接。

另一答案

什么都不能“保证交付”(如果连接的另一端崩溃了怎么办?)。但是,Write是一个阻塞调用,如果你检查返回的error值,你至少可以在调用Close之前知道写入是否成功。

以上是关于发送消息保证后,是否与TCP套接字断开连接?的主要内容,如果未能解决你的问题,请参考以下文章

TCP保证可靠性建立连接和断开连接的过程

为啥我的 TCP 服务器套接字在一个客户端断开连接后关闭?

TCP 连接与 HTTP 请求的相关问题

TCP/IP网络编程:07优雅地断开套接字连接

客户端断开连接时套接字服务器崩溃

一个TCP 连接可以发送多少个HTTP请求?