GCDAsyncSocket写入超时不起作用

时间:2013-03-21 14:56:28

标签: iphone objective-c sockets gcdasyncsocket

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

非常感谢。

0 个答案:

没有答案