summaryrefslogtreecommitdiff
path: root/ext/net
diff options
context:
space:
mode:
Diffstat (limited to 'ext/net')
-rw-r--r--ext/net/01_net.js12
-rw-r--r--ext/net/ops.rs7
-rw-r--r--ext/net/ops_tls.rs8
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