我试图在使用 GCDAsyncSocket 时设置写操作超时。代码非常简单,如下所示。
[iAsyncSocket writeData:bytesToSend withTimeout:3.0 tag:0];
然后我在我的 Mac 上禁用 Internet 连接并等待写入超时发生,但没有任何反应。我没有GCDAsyncSocketWriteTimeoutError
像我应该的那样因错误而断开连接。
我还验证了我的服务器在我关闭 Internet 连接后按预期停止接收消息。
我查看了源代码,发现负责触发写入超时事件的 writeTimer 总是被取消(调用函数endCurrentWrite
)。追溯到定时器被取消的地方,我最终得到了以下代码行。
ssize_t result = write(socketFD, buffer, (size_t)bytesToWrite);
write 系统调用总是返回我发送的字节总数,就好像套接字设法发送数据一样,尽管没有 Internet 连接。这是合乎逻辑的吗?
有没有人遇到过同样的问题或看到过类似的行为?或者有没有人设法为 GCDAsyncSocket 设置写超时?
非常感谢。