1

这是设置:

我有一个使用创建的输入流CFReadStreamCreateForStreamedHTTPRequest。它具有kCFStreamPropertyHTTPAttemptPersistentConnection属性集(我正在汇集连接)。我连接的服务器正在返回分块编码的数据。

在我们的正常情况下一切正常。我的问题是,如果有任何问题,我正在与之交谈的服务器会断开我的连接。对于我的生活,我无法弄清楚如何检测断开的连接。

在我的流的事件回调中,我只看到kCFStreamEventEndEncountered但没有报告任何错误,即使在 Wireshark 中我可以清楚地看到连接在发送流结束分块编码标记之前很久就获得了 FIN。

当服务器断开连接时,我似乎应该收到一个kCFURLErrorNetworkConnectionLost错误事件,但我只是遇到了。

任何建议都非常感谢。

4

1 回答 1

3

经过一番挖掘,但事实证明这实际上是 CFNetwork 的一个问题。我回到 10.4.10 的 Darwin 资源并在 CFHTTPFilter.c 中找到了这条评论

// Premature end of stream.  However, some servers send simply CRLF for their last chunk instead of 0CRLF; be tolerant of this.

因此,iOS 和 OS X 中的内置 HTTP 块解码器如果在分块数据块之后成功读取 CRLF 并且在缓冲区。

于 2012-06-13T22:11:00.247 回答