読み取りタイムアウトを処理するコードで 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]];
}
}
}
参考までに、このキープアライブ機能を追加するhttps://github.com/robbiehanson/CocoaAsyncSocket/pull/126にプル リクエストがありますが、まだプルされていません。