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() } }