Il est impossible pour une socket de détecter une déconnexion.
C'est pour cela qu'en général, on regarde si on peut recevoir des données.
Si oui, c'est que la connexion est encore ouverte. Si ça déclenche une erreur, c'est que la connexion a été fermée.
L'erreur que tu as est absolument logique. Il faut juste rajouter un bloc Try/Catch pour intercepter l'erreur et indiquer que la connexion a été coupée