2012-06-11 54 views
1

這裏的設置:如何檢測CFStream/NSStream丟失的連接?

我有一個輸入流創建CFReadStreamCreateForStreamedHTTPRequest。它具有kCFStreamPropertyHTTPAttemptPersistentConnection屬性集(我正在池連接)。我要連接的服務器使用分塊編碼來返回數據。

在我們的正常情況下,一切正常。我的問題是,如果有任何問題,我正在通話的服務器會斷開我的連接。對於我的生活,我無法弄清楚如何檢測掉線連接。

在我的流的事件回調中,我只看到kCFStreamEventEndEncountered,但是即使在Wireshark中我也可以清楚地看到,在發送結束流分塊編碼標記之前,連接已經變得很長。

看來我應該得到一個kCFURLErrorNetworkConnectionLost錯誤事件當服務器丟棄連接,但我只是遇到最終遇到。

任何建議非常感謝。

+0

NSURLConnection是否工作?有什麼理由不使用它嗎? –

+1

有太多的原因太漫長,無法進入。我對爲什麼要改爲XYZ的建議不感興趣。我需要知道如何檢測CFStream中的連接斷開。 –

+0

這聽起來像是你在CFNetwork中發現了一個錯誤。 –

回答

3

它花了一些挖掘,但事實證明,這實際上是CFNetwork的一個問題。我又回到了達爾文10.4.10來源,發現這條評論中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並且在緩衝區中沒有更多未完成字節,則不報告錯誤)。