Skip to content

Async IO, Mio support #1043

Open
Open
@koraa

Description

@koraa

Thank you for building hermit; I hope this will become a conerstone of rust infrastructure soon!

At Rosenpass (post quantum security for WireGuard in Rust) we are currently exploring using broker based security sandboxing. As part of this project we are trying to add experimental support for running significant parts of the Rosenpass deployment inside Hermit OS.

The core rosenpass process uses mio to handle IO operations to enable the use of async io. We are considering eventually migrating to tokio.

Building hermit-rs-template with --target x86_64-unknown-hermit and a dependency on mio without non-default features yields a successful build. Adding the net feature yields a whole bunch of compile time errors (log).

Is using mio expected to work?

diff --git a/Cargo.toml b/Cargo.toml
index 452bbdc..240333f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -4,4 +4,7 @@ version = "0.1.0"
 edition = "2021"

 [target.'cfg(target_os = "hermit")'.dependencies]
-hermit = "0.8"
+hermit = { version = "0.8", features = ["pci", "pci-ids", "acpi", "fsgsbase", "tcp", "rtl8139"]}
+
+[dependencies]
+mio = { version = "0.8.10", features = ["net"] }

Errors (excerpt)

   Compiling mio v0.8.10
error[E0425]: cannot find value `listener` in this scope
  --> /home/karo/.cargo/registry/src/index.crates.io-6f17d22bba15001f/mio-0.8.10/src/net/tcp/listener.rs:74:24
   |
74 |         set_reuseaddr(&listener.inner, true)?;
   |                        ^^^^^^^^ help: a function with a similar name exists: `listen`
   |
  ::: /home/karo/.cargo/registry/src/index.crates.io-6f17d22bba15001f/mio-0.8.10/src/sys/shell/tcp.rs:20:1
   |
20 | pub(crate) fn listen(_: &net::TcpListener, _: u32) -> io::Result<()> {
   | -------------------------------------------------------------------- similarly named function `listen` defined here

error[E0425]: cannot find value `listener` in this scope
  --> /home/karo/.cargo/registry/src/index.crates.io-6f17d22bba15001f/mio-0.8.10/src/net/tcp/listener.rs:76:15
   |
76 |         bind(&listener.inner, addr)?;
   |               ^^^^^^^^ help: a function with a similar name exists: `listen`
   |
  ::: /home/karo/.cargo/registry/src/index.crates.io-6f17d22bba15001f/mio-0.8.10/src/sys/shell/tcp.rs:20:1
   |
20 | pub(crate) fn listen(_: &net::TcpListener, _: u32) -> io::Result<()> {
   | -------------------------------------------------------------------- similarly named function `listen` defined here

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions