2015-07-21 19 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()错误。