If the connection or pipe is closed normally

In fact, when we close a connection or a pipe, we first close the output stream or output pipe. But we don't know why, or that this is the norm.

HTTP 规范建议, 当客户端或服务器突然要
关闭一条连接时, 应该“正常地关闭传输连
接”, 但它并没有说明应该如何去做。
总之, 实现正常关闭的应用程序首先应该关
闭它们的输出信道, 然后等待连接另一端的
对等实体关闭它的输出信道。 当两端都告诉
对方它们不会再发送任何数据(比如关闭输
出信道) 之后, 连接就会被完全关闭, 而不
会有重置的危险。
但不幸的是, 无法确保对等实体会实现半关
闭, 或对其进行检查。 因此, 想要正常关闭
连接的应用程序应该先半关闭其输出信道,
然后周期性地检查其输入信道的状态(查找
数据, 或流的末尾) 。 如果在一定的时间区
间内对端没有关闭输入信道, 应用程序可以
强制关闭连接, 以节省资源。

总之, 关闭连接的输出信道总是很安全的。
连接另一端的对等实体会在从其缓冲区中读
出所有数据之后收到一条通知, 说明流结束
了, 这样它就知道你将连接关闭了。
关闭连接的输入信道比较危险, 除非你知道
另一端不打算再发送其他数据了。 如果另一端向你已关闭的输入信道发送数据, 操作系
统就会向另一端的机器回送一条 TCP“连接
被对端重置”的报文, 会导致 连接的另一端 读取不到缓存的数据。


The Definitive Guide to HTTP

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325207131&siteId=291194637