我在处理读取超时的代码中查看了 GCDAsyncSocket.m。如果我不延长超时,似乎套接字已关闭,并且套接字活动保持没有选项。我不能使用无限超时(timeout = -1),因为我仍然需要知道它何时超时,但也不希望它断开连接。我不确定这背后有什么原因。有人知道吗?
- (void)doReadTimeoutWithExtension:(NSTimeInterval)timeoutExtension
{
    if (currentRead)
    {
        if (timeoutExtension > 0.0)
        {
            currentRead->timeout += timeoutExtension;
            // Reschedule the timer
            dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (timeoutExtension * NSEC_PER_SEC));
            dispatch_source_set_timer(readTimer, tt, DISPATCH_TIME_FOREVER, 0);
            // Unpause reads, and continue
            flags &= ~kReadsPaused;
            [self doReadData];
        }
        else
        {
            LogVerbose(@"ReadTimeout");
            [self closeWithError:[self readTimeoutError]];
        }
    }
}
仅供参考,在https://github.com/robbiehanson/CocoaAsyncSocket/pull/126有一个拉取请求,它添加了此保持活动功能,但尚未拉取。