Often the screen says that one was discnnected for an unknown reason.
Since the disconnect reason is sent as an int from C++ to JS, a timeout will end up as the state NDR_UNKNOWN = 0.
But that disconnect reason is also sent in case of some serverside errors.
It were preferable to debugging developers but also players to distinguish a network timeout from errors.
As a rule we can deduce to keep one separate disconnect reason per call to the disconnect function.
(Notice the disconnect reason is not transmitted reliably, so we can't have reason 0 to point to network timeouts even if we replace all NDR_UNKNOWN disconnects.
See the enet_peer_disconnect_now call in ~CNetClientSession, see http://enet.bespin.org/group__peer.html#ga636cc45f52461b567d6daffe4ab8f4e9.)
(Was also thinking about moving the strings from JS to C++ right near the enum, maybe in a macro creating the enum and stringmap, as discussed in D1517. But meh, JS is nicer to modify, especially for mods.)