2015-07-21 20 views
0

您好我正在使用dispatch_io_read在Xcode 7 Beta3 swift 2中的套接字。當期望的接收數據大小小於我指定的長度時,看起來讀取動作將保持在那裏。例如,dispatch_io_read一個套接字將等待更多的數據,如果接收數據的大小小於長度

如果我做

dispatch_io_read(channel!, 0, 1000, inputQueue!, myReadHandler)

,並從服務器的數據小於1000個字節,myReadHandler將永遠不會被調用。

要解決這個問題,我必須逐個讀取字節,有沒有更好的解決方案?

謝謝。

+0

你可以使用dispatch_io_set_low_water(channel!,1)在通道上調用dispatch_io_read之前將水印設置爲1 –

+0

是的,我認爲這是可行的,也是一種做法。我結束了寫邏輯,根據標題中的信息(前2個字節)讀取確切的字節數。謝謝您的回覆。 – Zhao

回答

0

這可能是有點晚,但任何人誰具有相同的問題 apple's documentation表明..

「長度參數指示應該從I/O通道讀取的字節數。通SIZE_MAX保持讀取,直到遇到EOF(對於從基於磁盤的文件創建的通道,這發生在讀取物理文件末尾時發生)。「

因此,只需使用SIZE_MAX將讀取附加到文件描述符的所有可用數據。

不幸的是,這似乎無法正常工作,因爲Swift 3中的DispatchIO.read()錯誤。