aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-12 19:27:40 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-12 19:38:27 -0800
commit73e9cd8e06058a99f5222572dfd49bae1581002a (patch)
tree5ab5104017b376c10a8508f6f13293fd4a6b8b50 /src
parent62cab3c719aafbf0a41d08276e0fd038ca5a67ea (diff)
downloadbun-73e9cd8e06058a99f5222572dfd49bae1581002a.tar.gz
bun-73e9cd8e06058a99f5222572dfd49bae1581002a.tar.zst
bun-73e9cd8e06058a99f5222572dfd49bae1581002a.zip
[Bun.listen] Add flag to close all connections
Diffstat (limited to 'src')
-rw-r--r--src/bun.js/api/bun/socket.zig17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/bun.js/api/bun/socket.zig b/src/bun.js/api/bun/socket.zig
index 911dc9e89..7a3176072 100644
--- a/src/bun.js/api/bun/socket.zig
+++ b/src/bun.js/api/bun/socket.zig
@@ -630,15 +630,23 @@ pub const Listener = struct {
// uws.us_socket_context_add_server_name
// }
- pub fn stop(this: *Listener, _: *JSC.JSGlobalObject, _: *JSC.CallFrame) callconv(.C) JSValue {
+ pub fn stop(this: *Listener, _: *JSC.JSGlobalObject, callframe: *JSC.CallFrame) callconv(.C) JSValue {
+ const arguments = callframe.arguments(1);
log("close", .{});
- var listener = this.listener orelse return JSValue.jsUndefined();
- this.listener = null;
- listener.close(this.ssl);
+ if (arguments.len > 0 and arguments.ptr[0].isBoolean() and arguments.ptr[0].toBoolean() and this.socket_context != null) {
+ this.socket_context.?.close(this.ssl);
+ this.listener = null;
+ } else {
+ var listener = this.listener orelse return JSValue.jsUndefined();
+ this.listener = null;
+ listener.close(this.ssl);
+ }
+
this.poll_ref.unref(this.handlers.vm);
if (this.handlers.active_connections == 0) {
this.handlers.unprotect();
+ this.socket_context.?.close(this.ssl);
this.socket_context.?.deinit(this.ssl);
this.socket_context = null;
this.strong_self.clear();
@@ -661,6 +669,7 @@ pub const Listener = struct {
std.debug.assert(this.handlers.active_connections == 0);
if (this.socket_context) |ctx| {
+ ctx.close(this.ssl);
ctx.deinit(this.ssl);
}