Skip to content

Commit

Permalink
fix(net): handle panic on Windows for Unix socket usage in Deno.serve…
Browse files Browse the repository at this point in the history
…() (denoland#24423)

This PR addresses the issue where Deno.serve() panics on Windows when
trying to use a Unix socket.
Fixes denoland#21967
  • Loading branch information
yazan-abdalrahman authored Jul 9, 2024
1 parent 77c5a33 commit c11e2c7
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 4 deletions.
22 changes: 18 additions & 4 deletions ext/net/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,14 +158,28 @@ mod ops_unix {
macro_rules! stub_op {
($name:ident) => {
#[op2(fast)]
pub fn $name() {
panic!("Unsupported on non-unix platforms")
pub fn $name() -> Result<(), std::io::Error> {
let error_msg = format!(
"Operation `{:?}` not supported on non-unix platforms.",
stringify!($name)
);
Err(std::io::Error::new(
std::io::ErrorKind::Unsupported,
error_msg,
))
}
};
($name:ident<P>) => {
#[op2(fast)]
pub fn $name<P: NetPermissions>() {
panic!("Unsupported on non-unix platforms")
pub fn $name<P: NetPermissions>() -> Result<(), std::io::Error> {
let error_msg = format!(
"Operation `{:?}` not supported on non-unix platforms.",
stringify!($name)
);
Err(std::io::Error::new(
std::io::ErrorKind::Unsupported,
error_msg,
))
}
};
}
Expand Down
25 changes: 25 additions & 0 deletions tests/unit/serve_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4034,3 +4034,28 @@ Deno.test(
await server.finished;
},
);

Deno.test({
name: "HTTP Server test (error on non-unix platform)",
ignore: Deno.build.os !== "windows",
}, async () => {
await assertRejects(
async () => {
const ac = new AbortController();
const server = Deno.serve({
path: "path/to/socket",
handler: (_req) => new Response("Hello, world"),
signal: ac.signal,
onListen({ path: _path }) {
console.log(`Server started at ${_path}`);
},
});
server.finished.then(() => console.log("Server closed"));
console.log("Closing server...");
ac.abort();
await new Promise((resolve) => setTimeout(resolve, 100)); // Example of awaiting something
},
Error,
'Operation `"op_net_listen_unix"` not supported on non-unix platforms.',
);
});

0 comments on commit c11e2c7

Please sign in to comment.