You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
connect to host … : Unknown error for WSAEHOSTUNREACH / WSAENETUNREACH (no errno mapping) #2482
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
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.
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:
returnwsaerrno-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)
Activity