Skip to content

Commit 95b09b3

Browse files
committed
Do not close connection after a single request completed
This should allow actual persistent connections (keep-alive). Pipelining and multiplexing are still not supported.
1 parent 8ad11b0 commit 95b09b3

2 files changed

Lines changed: 7 additions & 12 deletions

File tree

weblink/Response.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class Response {
4343
try {
4444
client.writeString(sendHeaders(bytes.length).toString());
4545
client.writeBytes(bytes);
46-
} catch (_:Eof) {
46+
} catch (_) {
4747
// The connection has already been closed, silently ignore
4848
}
4949

weblink/_internal/WebServer.hx

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,12 @@ class WebServer {
2525

2626
private function onConnection(client:TcpClient):Void {
2727
var request:Null<Request> = null;
28-
var done:Bool = false;
2928

3029
client.startReading(chunk -> @:privateAccess {
31-
if (done) {
32-
client.closeAsync();
33-
return;
34-
}
35-
3630
final data = switch chunk {
3731
case Data(bytes): bytes;
3832
case Eof:
33+
request = null;
3934
client.closeAsync();
4035
return;
4136
}
@@ -45,34 +40,34 @@ class WebServer {
4540
request = new Request(lines);
4641

4742
if (request.pos >= request.length) {
48-
done = true;
4943
this.completeRequest(request, client);
44+
request = null;
5045
return;
5146
}
52-
} else if (!done) {
47+
} else {
5348
final length = request.length - request.pos < data.length ? request.length - request.pos : data.length;
5449
request.data.blit(request.pos, data, 0, length);
5550
request.pos += length;
5651

5752
if (request.pos >= request.length) {
58-
done = true;
5953
this.completeRequest(request, client);
54+
request = null;
6055
return;
6156
}
6257
}
6358

6459
if (request.chunked) {
6560
request.chunk(data.toString());
6661
if (request.chunkSize == 0) {
67-
done = true;
6862
this.completeRequest(request, client);
63+
request = null;
6964
return;
7065
}
7166
}
7267

7368
if (request.method != Post && request.method != Put) {
74-
done = true;
7569
this.completeRequest(request, client);
70+
request = null;
7671
}
7772
});
7873
}

0 commit comments

Comments
 (0)