1

我试图在使用 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 设置写超时?

非常感谢。

4

0 回答 0