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