【发布时间】:2017-12-26 23:01:41
【问题描述】:
我找不到太多这方面的信息,但我有一个简单的代码序列,例如:
// 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 ,如果握手太慢而无法及时完成,可能会在握手期间关闭连接?
【问题讨论】:
-
也许您可以更清楚地了解保证的含义。 TCP 尽最大努力传递消息,但如果出现网络问题,它就无法解决。
-
我想这取决于实现,但至少在标准情况下,关闭套接字(在建立连接之后)应该首先尝试在缓冲区中传递数据。
-
@JamesKPolk 我的意思是在握手完成或失败之前,代码是否仍然在 Write() 上而不去 Close() ?或者它是否写入/发送然后运行 Close() 而不管结果如何,这意味着它可以在尚未完成来自客户端的确认时关闭?
-
@Radu 很高兴知道它会尝试发送缓冲区,但你知道他们在哪里提到过吗?
-
Write()是一个阻塞调用,它返回已写入的bytes的编号和可选的error(如果有)more info here