Skip to content

connect to host … : Unknown error for WSAEHOSTUNREACH / WSAENETUNREACH (no errno mapping) #2482

Open

Description

@justinlplummer5

Summary

When the TCP connect fails because the host or network is unreachable (for example, Wi-Fi drops), ssh prints

ssh: connect to host 192.168.0.63 port 22: Unknown error

instead of a meaningful message. Tools that parse ssh's output to decide whether a failure is transient can't classify it. VS Code Remote-SSH, for example, treats it as a permanent error and stops reconnecting.

Steps to reproduce

  1. ssh -F NUL -o BatchMode=yes x@240.0.0.1 (no route) → ssh: connect to host 240.0.0.1 port 22: Unknown error, instantly.
  2. Or, with Wi-Fi disconnected (netsh wlan disconnect), ssh <LAN host> → same Unknown error. .NET reports the same connect as SocketError.HostUnreachable (10065).

Expected

No route to host / Network is unreachable (or at least a message naming the Winsock error).

Actual

Unknown error.

Cause

contrib/win32/win32compat/socketio.c, errno_from_WSAError() maps only a handful of WSA codes. Everything else falls to

default:
    return wsaerrno - 10000;

So WSAEHOSTUNREACH (10065) becomes errno 65 and WSAENETUNREACH (10051) becomes 51. w32_strerror() in misc.c only has strings for EADDRINUSE..EWOULDBLOCK (100–140), so strerror_s returns "Unknown error" for those values.

Suggested fix: add explicit cases:

  • WSAENETDOWN → ENETDOWN
  • WSAENETUNREACH → ENETUNREACH
  • WSAEHOSTUNREACH → EHOSTUNREACH
  • WSAEADDRNOTAVAIL → EADDRNOTAVAIL

Optionally, use the POSIX/glibc wording in _sys_errlist_ext ("No route to host", "Network is unreachable"); the current "Host is unreachable" and "Network unreachable" differ from what other platforms print and from what scripts match.

Version

  • OpenSSH_for_Windows_9.5p1, LibreSSL 3.8.2 (Windows 10 Pro 22H2 19045, built-in)
  • Same code in v10.4.0.0 (socketio.c unchanged).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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