Hlu*_*ung 5 tcp objective-c ios cocoaasyncsocket
我在处理读取超时的代码中查看了GCDAsyncSocket.m.如果我没有延长超时,似乎套接字已关闭,并且套接字没有选项保持.我不能使用无限超时(超时= -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]];
}
}
}
Run Code Online (Sandbox Code Playgroud)
仅供参考,https://github.com/robbiehanson/CocoaAsyncSocket/pull/126上有一个拉取请求,它添加了这个保持活动的功能,但尚未提取.
Dus*_*oss 14
我是AsyncSocket的原作者,我可以告诉你为什么我这样做:协议处理超时的方法太多了.所以我实现了一个"硬"超时并将"软"超时留给了应用程序作者.
执行"软"超时的常用方法是使用NSTimer
或dispatch_after
.设置其中一个,当计时器触发时,做你需要做的任何事情.同时,在实际readData
呼叫中使用无限超时.请注意,无限超时实际上并不是无限的.在没有成功阅读的情况下,操作系统仍会在10分钟后超时.如果您确实希望永久保持连接,则可以设置套接字选项.
归档时间: |
|
查看次数: |
3502 次 |
最近记录: |