From d9dbb4053183f2b2efda573c8080db469db2f248 Mon Sep 17 00:00:00 2001 From: Carl Brown Date: Sat, 7 Oct 2017 12:18:11 -0500 Subject: [PATCH] Sockets aren't idle if response not completed (#63) --- .../HTTP/PoCSocket/PoCSocketConnectionListener.swift | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Sources/HTTP/PoCSocket/PoCSocketConnectionListener.swift b/Sources/HTTP/PoCSocket/PoCSocketConnectionListener.swift index a51d6e2..03e9e13 100644 --- a/Sources/HTTP/PoCSocket/PoCSocketConnectionListener.swift +++ b/Sources/HTTP/PoCSocket/PoCSocketConnectionListener.swift @@ -151,6 +151,10 @@ public class PoCSocketConnectionListener: ParserConnecting { /// Check if the socket is idle, and if so, call close() func closeIfIdleSocket() { + if !self.responseCompleted { + //We're in the middle of a connection - we're not idle + return + } let now = Date().timeIntervalSinceReferenceDate if let keepAliveUntil = parser?.keepAliveUntil, now >= keepAliveUntil { print("Closing idle socket \(socketFD)") @@ -170,15 +174,13 @@ public class PoCSocketConnectionListener: ParserConnecting { /// Called by the parser to let us know that a response has started being created public func responseBeginning() { - self.socketWriterQueue.async { [weak self] in - self?.responseCompleted = false - } + self.responseCompleted = false } /// Called by the parser to let us know that a response is complete, and we can close after timeout public func responseComplete() { + self.responseCompleted = true self.socketWriterQueue.async { [weak self] in - self?.responseCompleted = true if self?.readerSource?.isCancelled ?? true { self?.close() } @@ -187,8 +189,8 @@ public class PoCSocketConnectionListener: ParserConnecting { /// Called by the parser to let us know that a response is complete and we should close the socket public func responseCompleteCloseWriter() { + self.responseCompleted = true self.socketWriterQueue.async { [weak self] in - self?.responseCompleted = true self?.close() } }