Skip to content

wasix: read IPC streams with plain read() instead of failing ENOSYS#8

Open
Arshia001 wants to merge 1 commit into
wasix-1.51.0from
fix/wasix-ipc-plain-read
Open

wasix: read IPC streams with plain read() instead of failing ENOSYS#8
Arshia001 wants to merge 1 commit into
wasix-1.51.0from
fix/wasix-ipc-plain-read

Conversation

@Arshia001

Copy link
Copy Markdown

The IPC branch of uv__stream_io was stubbed to fail ENOSYS under __wasi__ (no msghdr support), which killed every Node child_process.fork / cluster.fork IPC channel on first readiness: the stream errored, libuv closed the fd, and subsequent sends failed EPIPE.

No descriptor can accompany IPC data on WASIX anyway — uv__try_write already refuses send_handle with UV_ENOSYS on both ends — so a plain read() preserves the IPC byte stream exactly. Verified end-to-end with EdgeJS on wasmer 7.2.0-rc.1: fork ping/pong roundtrip, cluster worker online handshake, and cluster listen negotiation all work; handle passing (round-robin connection distribution) remains unsupported as before.

🤖 Generated with Claude Code

The IPC branch of uv__stream_io was stubbed to fail ENOSYS under __wasi__
(no msghdr support), which killed every Node child_process.fork /
cluster.fork IPC channel on first readiness: the stream errored, libuv
closed the fd, and subsequent sends failed EPIPE.

No descriptor can accompany IPC data on WASIX anyway - uv__try_write
already refuses send_handle with UV_ENOSYS on both ends - so a plain
read() preserves the IPC byte stream exactly. This makes fork/process.send
message channels fully functional under WASIX; passing handles (cluster
round-robin connection distribution) remains unsupported.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant