rust-lang/mdBook · error
no address found for {}
Error message
no address found for {} What it means
`mdbook serve` resolves the --hostname/--port (or the address string) into a SocketAddr via ToSocketAddrs and takes the first result. If resolution yields no addresses, serving cannot proceed and this error is raised with the original address string.
Source
Thrown at src/cmd/serve.rs:75
let open_browser = args.get_flag("open");
let address = format!("{hostname}:{port}");
let update_config = |book: &mut MDBook| {
book.config
.set("output.html.live-reload-endpoint", LIVE_RELOAD_ENDPOINT)
.expect("live-reload-endpoint update failed");
set_dest_dir(args, book);
// Override site-url for local serving of the 404 file
book.config.set("output.html.site-url", "/").unwrap();
};
update_config(&mut book);
book.build()?;
let sockaddr: SocketAddr = address
.to_socket_addrs()?
.next()
.ok_or_else(|| anyhow::anyhow!("no address found for {}", address))?;
let build_dir = book.build_dir_for("html");
let html_config = book.config.html_config().unwrap_or_default();
let file_404 = html_config.get_404_output_file();
// A channel used to broadcast to any websockets to reload when a file changes.
let (tx, _rx) = tokio::sync::broadcast::channel::<Message>(100);
let reload_tx = tx.clone();
let thread_handle = std::thread::spawn(move || {
serve(build_dir, sockaddr, reload_tx, &file_404);
});
let serving_url = format!("http://{address}");
info!("Serving on: {}", serving_url);
if open_browser {
open(serving_url);
}View on GitHub (pinned to dc21064fc2)
Solutions
- Use an explicit address like `mdbook serve -n 127.0.0.1 -p 3000` (or `localhost`) instead of an unresolvable hostname.
- Check DNS/network connectivity: verify the hostname resolves (`getent hosts <host>` or `nslookup <host>`).
- Correct the --hostname value or the address passed in the serve command/config.
Example fix
// before mdbook serve --hostname mybox.internal --port 3000 // after mdbook serve --hostname 127.0.0.1 --port 3000
Defensive patterns
Strategy: try-catch
Validate before calling
// Pre-check address resolution
require('dns').lookup(host, (err) => { if (err) console.error(`cannot resolve ${host}`); }); Try / catch
// Rust
match mdbook::cmd::serve::execute(args) {
Err(e) if e.to_string().starts_with("no address found") => {
eprintln!("Unresolvable hostname; try --hostname 127.0.0.1: {e}");
std::process::exit(1);
}
res => res,
} Prevention
- Default to 127.0.0.1 or localhost for local serving.
- Validate hostnames with DNS lookup before invoking mdbook serve.
- Prefer numeric IPs in CI/containers where DNS may be unavailable.
When it happens
Trigger: Running mdbook serve with a hostname that DNS cannot resolve (or no results from to_socket_addrs), e.g. `mdbook serve -n bad.host.example` or an unresolvable interface name; the iterator .next() is None.
Common situations: Typo in the --hostname flag; using a hostname only resolvable on another network (VPN/corporate DNS); offline machine with a hostname instead of 127.0.0.1/localhost; container without DNS configured.
Related errors
- Unable to bind to {address}: {e}
- redirect entry for `{original}` only has source paths with `
- theme dir {} does not exist
- redirect found for existing chapter at `{path}` Either delet
- [output.html.search.chapter] key `{}` does not match any cha
AI-assisted analysis of rust-lang/mdBook@dc21064fc2 (2026-09-01).
Data as JSON: /api/errors/4a9c1eabb679e93c.
Report an issue: GitHub.