dispatch_io_read如果接收数据大小小于length,套接字将等待更多数据

时间:2015-07-21 00:13:57

标签: ios sockets grand-central-dispatch

您好我在Xcode 7 Beta3上使用dispatch_io_read在swift 2中使用套接字。当预期的接收数据大小小于我指定的长度时,看起来读操作将保持在那里。例如,

如果我这样做

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

并且来自服务器的数据少于1000个字节,myReadHandler永远不会被调用。

要解决这个问题,我必须逐个读取字节,是否有更好的解决方案?

感谢。

1 个答案:

答案 0 :(得分:1)

这可能有点晚了,但对于遇到同样问题的人来说 apple's documentation显示了......

" length参数表示应从I / O通道读取的字节数。通过import textsEn from 'texts.en.json'; import textsDe from 'texts.de.json'; import textsEs from 'texts.es.json'; .config($translateProvider => { $translateProvider.translations('en', textsEn); $translateProvider.translations('de', textsDe); $translateProvider.translations('es', textsEs); }) 以保持读数直到遇到EOF(对于从基于磁盘的文件创建的通道,当读取超过物理文件的末尾时会发生这种情况)。"

因此,只需使用SIZE_MAX即可读取附加到文件描述符的所有可用数据。

不幸的是,由于Swift 3中的DispatchIO.read()错误,这似乎无法正常工作。