Skip to content

Commit c0082a6

Browse files
committed
fix: release socket table lock before blocking connect and improve timeout test
Signed-off-by: danbugs <danilochiarlone@gmail.com>
1 parent 1fe378f commit c0082a6

1 file changed

Lines changed: 15 additions & 8 deletions

File tree

host/src/lib.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,8 +1201,10 @@ fn register_net_tools(
12011201
let addr = parse_sockaddr(&args)?;
12021202
pol.check(&addr)?;
12031203
let sa: SockAddr = addr.into();
1204-
let tbl = t.lock().unwrap();
1205-
let sock = tbl.get_socket(fd)?;
1204+
let sock = {
1205+
let tbl = t.lock().unwrap();
1206+
tbl.get_socket(fd)?.try_clone()?
1207+
};
12061208
sock.connect_timeout(&sa, SOCKET_TIMEOUT)?;
12071209
Ok(json!({}))
12081210
});
@@ -3224,18 +3226,23 @@ mod tests {
32243226
fn net_socket_has_default_timeout() {
32253227
let mut tools = ToolRegistry::new();
32263228
let exit_code = Arc::new(AtomicI32::new(0));
3227-
register_internal_tools(&mut tools, &exit_code, Some(&NetworkPolicy::AllowAll), None);
3229+
let socket_table =
3230+
register_internal_tools(&mut tools, &exit_code, Some(&NetworkPolicy::AllowAll), None);
32283231

32293232
let req = br#"{"name":"net_socket","args":{"family":2,"type":1}}"#;
32303233
let resp = tools.dispatch(req);
32313234
let s = std::str::from_utf8(&resp).unwrap();
3235+
assert!(!s.contains("error"), "socket creation should succeed: {s}");
3236+
32323237
let v: serde_json::Value = serde_json::from_str(s).unwrap();
32333238
let fd = v["result"]["fd"].as_u64().unwrap();
3234-
3235-
// Verify the socket was created successfully
32363239
assert!(fd > 0);
3237-
// The timeout is set internally; we verify it works by checking
3238-
// that the response is valid (no error from set_read_timeout)
3239-
assert!(!s.contains("error"), "socket creation should succeed: {s}");
3240+
3241+
// Verify timeouts are actually set to SOCKET_TIMEOUT (30s)
3242+
let tbl = socket_table.unwrap();
3243+
let tbl = tbl.lock().unwrap();
3244+
let sock = tbl.get_socket(fd).unwrap();
3245+
assert_eq!(sock.read_timeout().unwrap(), Some(SOCKET_TIMEOUT));
3246+
assert_eq!(sock.write_timeout().unwrap(), Some(SOCKET_TIMEOUT));
32403247
}
32413248
}

0 commit comments

Comments
 (0)