diff options
Diffstat (limited to 'ext/net')
-rw-r--r-- | ext/net/01_net.js | 12 | ||||
-rw-r--r-- | ext/net/ops.rs | 7 | ||||
-rw-r--r-- | ext/net/ops_tls.rs | 8 |
3 files changed, 21 insertions, 6 deletions
diff --git a/ext/net/01_net.js b/ext/net/01_net.js index 517ab127e..536f79bbf 100644 --- a/ext/net/01_net.js +++ b/ext/net/01_net.js @@ -531,10 +531,14 @@ const listenOptionApiName = Symbol("listenOptionApiName"); function listen(args) { switch (args.transport ?? "tcp") { case "tcp": { - const { 0: rid, 1: addr } = op_net_listen_tcp({ - hostname: args.hostname ?? "0.0.0.0", - port: Number(args.port), - }, args.reusePort); + const { 0: rid, 1: addr } = op_net_listen_tcp( + { + hostname: args.hostname ?? "0.0.0.0", + port: Number(args.port), + }, + args.reusePort, + args.loadBalanced ?? false, + ); addr.transport = "tcp"; return new Listener(rid, addr); } diff --git a/ext/net/ops.rs b/ext/net/ops.rs index f28778d29..b74dc8d75 100644 --- a/ext/net/ops.rs +++ b/ext/net/ops.rs @@ -353,6 +353,7 @@ pub fn op_net_listen_tcp<NP>( state: &mut OpState, #[serde] addr: IpAddr, reuse_port: bool, + load_balanced: bool, ) -> Result<(ResourceId, IpAddr), AnyError> where NP: NetPermissions + 'static, @@ -367,7 +368,11 @@ where .next() .ok_or_else(|| generic_error("No resolved address found"))?; - let listener = TcpListener::bind_direct(addr, reuse_port)?; + let listener = if load_balanced { + TcpListener::bind_load_balanced(addr) + } else { + TcpListener::bind_direct(addr, reuse_port) + }?; let local_addr = listener.local_addr()?; let listener_resource = NetworkListenerResource::new(listener); let rid = state.resource_table.add(listener_resource); diff --git a/ext/net/ops_tls.rs b/ext/net/ops_tls.rs index a2a27c4ad..8483e7e66 100644 --- a/ext/net/ops_tls.rs +++ b/ext/net/ops_tls.rs @@ -475,6 +475,8 @@ fn load_private_keys_from_file( pub struct ListenTlsArgs { alpn_protocols: Option<Vec<String>>, reuse_port: bool, + #[serde(default)] + load_balanced: bool, } #[op2] @@ -502,7 +504,11 @@ where .next() .ok_or_else(|| generic_error("No resolved address found"))?; - let tcp_listener = TcpListener::bind_direct(bind_addr, args.reuse_port)?; + let tcp_listener = if args.load_balanced { + TcpListener::bind_load_balanced(bind_addr) + } else { + TcpListener::bind_direct(bind_addr, args.reuse_port) + }?; let local_addr = tcp_listener.local_addr()?; let alpn = args .alpn_protocols |