Skip to content

Commit

Permalink
Do not close connection after a single request completed
Browse files Browse the repository at this point in the history
This should allow actual persistent connections (keep-alive).

Pipelining and multiplexing are still not supported.
  • Loading branch information
Frixuu committed Sep 24, 2024
1 parent 67c0ca5 commit c3083b7
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 12 deletions.
2 changes: 1 addition & 1 deletion weblink/Response.hx
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class Response {
try {
client.writeString(sendHeaders(bytes.length).toString());
client.writeBytes(bytes);
} catch (_:Eof) {
} catch (_) {
// The connection has already been closed, silently ignore
}

Expand Down
17 changes: 6 additions & 11 deletions weblink/_internal/WebServer.hx
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,12 @@ class WebServer {

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

client.startReading(chunk -> @:privateAccess {
if (done) {
client.closeAsync();
return;
}

final data = switch chunk {
case Data(bytes): bytes;
case Eof:
request = null;
client.closeAsync();
return;
}
Expand All @@ -45,34 +40,34 @@ class WebServer {
request = new Request(lines);

if (request.pos >= request.length) {
done = true;
this.completeRequest(request, client);
request = null;
return;
}
} else if (!done) {
} else {
final length = request.length - request.pos < data.length ? request.length - request.pos : data.length;
request.data.blit(request.pos, data, 0, length);
request.pos += length;

if (request.pos >= request.length) {
done = true;
this.completeRequest(request, client);
request = null;
return;
}
}

if (request.chunked) {
request.chunk(data.toString());
if (request.chunkSize == 0) {
done = true;
this.completeRequest(request, client);
request = null;
return;
}
}

if (request.method != Post && request.method != Put) {
done = true;
this.completeRequest(request, client);
request = null;
}
});
}
Expand Down

0 comments on commit c3083b7

Please sign in to comment.