It sounds like the server is behind a firewall that is a little bit too strict. When the connection becomes idle for too long, the firewall "forgets" it and removes from the state table – even though the TCP layer on both hosts still considers the connection active.
When this happens, the firewall no longer allows any packets belonging to the connection – neither regular data packets, nor even the TCP FIN or TCP RST packets which are supposed to indicate that the connection has been closed.
(Normally this timeout should be set to at least several hours for TCP connections, but some vendors – e.g. Mikrotik RouterOS – set very short timeouts by default.)
As a user, you could try enabling "keepalive" features in PuTTY as a workaround – i.e. send dummy packets so that firewalls think the connection is still in use:
Connection → Seconds between keepalives: something like 60 or 300 seconds. (This uses protocol-specific packets but it should work for Telnet.)
Connection → Low-level TCP options → [✔] Enable TCP keepalives. (This works for any protocol, but doesn't let you specify how often to send the keepalive packets; it might be in the range of hours.)
1Do you have root/admin access to the server? Can you check whether it is receiving any packets on the old connection? – user1686 – 2019-03-26T06:19:30.307
I am not the admin, but I requested the admins to check and they told me they cannot see my active session. – Sora – 2019-03-26T06:26:54.053