SIGN IN SIGN UP

feat(server): detect a bound-but-unserviced port and report it

Start() succeeding proves only that the bind succeeded, not that the port is
being serviced. On Windows the server can end up bound to a port that accepts
TCP connections and then never answers them, so the editor reports a healthy
server while every client hangs (issue #141).

Adds a short background probe after a successful start. It connects to the port
and sends a request for a deliberately non-existent path: a healthy
websocket-sharp answers 501 and closes, which proves the accept loop is live
without ever creating a /McpUnity session. Only a read timeout is treated as
dead - both 'data received' and 'peer closed' count as alive, because silence
with the connection held open is the distinguishing signature.

Every resolved address is tried. Binding 'localhost' can yield an IPv6-only
listener, against which 127.0.0.1 is refused, so a default TcpClient (IPv4)
cannot reach a perfectly healthy server and would false-alarm.

This DETECTS and reports only; it does not attempt a repair, and the message
describes what was observed rather than asserting a cause.
T
TenaciousLibbs committed
8cc4270e8f511e22ea23b598a6a8c5c687d0d80e
Parent: bbfb1c0