【发布时间】:2016-11-16 14:59:54
【问题描述】:
我正试图围绕 NSOutputStream 上 hasSpaceAvailable 背后的逻辑。
在我的应用程序中,我通过由 NSInput/output 流管理的 CFSocket 发送大量数据 (100MB),分成 4080 字节的块(硬限制)。
当我开始写入数据时,大约四分之一处 hasSpaceAvailable 突然变为 NO,因此我将数据添加到队列中。但是,如果我忽略这一点并尝试写入数据,则写入似乎可以工作,因为write:maxLength: 的返回值与 maxLength 参数 (4080) 匹配。
输出流有什么空间?据我所知,在使用 UNIX/Berkley 套接字时,没有可用于确定套接字是否可以写入的逻辑,您只需编写并确定是否已写入所有数据。
该属性的文档说明:
一个布尔值,指示是否可以写入接收器。 (只读)
YES如果可以写入接收器,或者如果必须尝试写入以确定是否有可用空间,则NO否则。
在我看到 NO 的示例中,当我仍然可以写入该套接字时,是什么因素导致了这个结果。
【问题讨论】:
标签: objective-c sockets nsstream nsoutputstream cfsocket