2015-11-14 79 views
1

在使用NSStream.getStreamsToHostWithName()後,我輸入和輸出NSStream作爲TCP連接的一部分。如果我在這些輸入和輸出流上調用close()方法,那麼在函數返回時,我的TCP連接是否處於CLOSED狀態?NSStream.close()是否與TCP同步?

如果不是,我如何確定底層TCP連接實際關閉的時間?

回答

0

至於我可以告訴大家,答案是沒有,TCP連接不一定會處於關閉狀態。爲了確保TCP連接能夠正常關閉並找出這種情況,必須使用比NSStream更低級別的API。

0

關閉流終止字節流和釋放系統都留給了流當它被打開的 資源。如果在運行循環中調度了 流,則隱式關閉流 會從運行循環中刪除流。關閉的流可以 仍然會被查詢其屬性。

var streamStatus: NSStreamStatus { get } 

接收器的狀態

enum NSStreamStatus : UInt { 
    case NotOpen 
    case Opening 
    case Open 
    case Reading 
    case Writing 
    case AtEnd 
    case Closed 
    case Error 
} 
+0

嗯。在我看來,你只需複製/粘貼我鏈接的文字。 – EthanP

+0

關閉流會終止字節流並釋放系統資源。如果底層資源是文件或套接字,則在關閉流時,系統會釋放系統資源。在你的情況下,釋放套接字(如果沒有其他關聯流,即使你使用的是低級API,比如直接套接字函數,當你關閉套接字時,TCP堆棧仍然不會使用它。對於這個問題負責,關閉TCP連接和釋放套接字有很大的區別 – user3441734

+0

如果你關閉了你的流,對方會立即建議,但是沒有時間保證。到秒......對你來說沒有區別,一旦關閉,數據流不能再次用於數據傳輸 – user3441734