iphone - 使用 CFReadStream 进行异步 IO

标签 iphone cocoa networking network-programming

这是 Asynchronous IO with CFWriteStream 的兄弟问题。我正在使用 CFReadStreamScheduleWithRunLoop 和 CFReadSteamRead 来执行异步 IO。我们怎样才能安全地检索所有阻塞的日期?

假设消息的实际大小是 1200(但我们不知道),而我的读取缓冲区的大小是 1024。对 CFReadStreamRead 的调用将检索最多 1024 字节的数据,但因为我们不这样做如果不知道消息的大小,我们应该重复调用CFReadStreamRead。问题是,由于我们不知道流套接字已接收到多少数据,因此 CFReadStreamRead 可能会在第二次调用时阻塞。我们怎样才能避免这个问题呢?

谢谢!

最佳答案

在您的流上再次调用 CFReadStreamHasBytesAvailable(),看看从中读取是否仍然安全(或者是否唯一知道的方法就是尝试)。

关于iphone - 使用 CFReadStream 进行异步 IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3343984/

相关文章:

iphone - ios:改变方向后UIView的宽高不准确?

iphone - 我们能否跟踪用户在 iPhone 上使用所有其他应用程序的时间?

像 Safari 一样的 cocoa 组合框

cocoa - 如何在基于 NSDocument 的 Cocoa 应用程序中使用 NSViewController

android - 更改网络时接收 NETWORK_STATE_CHANGED_ACTION 已连接

ios - IOS 外部 GPS 数据的 WGS84 Geoid Height Altitude Offset

java - 如何创建简单的网络服务

iphone - 如何使用 NSPredicate 返回整个集合/数组?

Docker 服务陷入新状态(Swarm)

linux - 判断getaddrinfo返回的addrinfo结构中哪些属于当前机器