mirror of
https://github.com/swift-server/async-http-client.git
synced 2026-06-02 07:37:34 +00:00
close connections after request is processed (#34)
* close connections after request is processed
This commit is contained in:
@@ -286,6 +286,8 @@ internal class TaskHandler<T: HTTPClientResponseDelegate>: ChannelInboundHandler
|
||||
headers.add(name: "Host", value: request.host)
|
||||
}
|
||||
|
||||
headers.add(name: "Connection", value: "close")
|
||||
|
||||
do {
|
||||
try headers.validate(body: request.body)
|
||||
} catch {
|
||||
@@ -321,6 +323,11 @@ internal class TaskHandler<T: HTTPClientResponseDelegate>: ChannelInboundHandler
|
||||
|
||||
self.state = .sent
|
||||
self.delegate.didTransmitRequestBody(task: self.task)
|
||||
|
||||
let channel = context.channel
|
||||
self.promise.futureResult.whenComplete { _ in
|
||||
channel.close(promise: nil)
|
||||
}
|
||||
}
|
||||
|
||||
func channelRead(context: ChannelHandlerContext, data: NIOAny) {
|
||||
@@ -346,6 +353,7 @@ internal class TaskHandler<T: HTTPClientResponseDelegate>: ChannelInboundHandler
|
||||
case .redirected(let head, let redirectURL):
|
||||
self.state = .end
|
||||
self.redirectHandler?.redirect(status: head.status, to: redirectURL, promise: self.promise)
|
||||
context.close(promise: nil)
|
||||
default:
|
||||
self.state = .end
|
||||
do {
|
||||
|
||||
@@ -55,6 +55,7 @@ class SwiftHTTPTests: XCTestCase {
|
||||
head.headers.add(name: "X-Test-Header", value: "X-Test-Value")
|
||||
head.headers.add(name: "Host", value: "localhost")
|
||||
head.headers.add(name: "Content-Length", value: "4")
|
||||
head.headers.add(name: "Connection", value: "close")
|
||||
XCTAssertEqual(HTTPClientRequestPart.head(head), recorder.writes[0])
|
||||
var buffer = ByteBufferAllocator().buffer(capacity: 4)
|
||||
buffer.writeString("1234")
|
||||
|
||||
Reference in New Issue
Block a user