C # SocketException não é pego

Eu tenho uma localização muito estranha acontecendo no meu código. Estou desenvolvendo um aplicativo cliente-servidor c # chat. Quando fecho o servidor, quero que o cliente seja fechado automaticamente. O cliente está lendo do objeto TcpClient usando um StremReader. O cliente está em um loop while, onde lê uma linha (StreamReader.ReadLine ()) e, em seguida, realiza algumas operações com a linha que lê. Quando o servidor fica fechado, também fecho a conexão tcp do lado do servidor. Então, estou esperando que o cliente veja uma SocketException causada pela linha de leitura, pegue-a e saia. Mas a exceção não é pega! Aqui está o código do loop do cliente:

 while (true)
 {
     try
     {
          ricev = read.ReadLine();
     }
     catch(SocketException exc)
     {
         //It never gets in here
     }
     chat.Invoke(showMessage, ricev);
 }

Quando fecho o servidor, o visual studio informa que uma exceção de primeira chance "System.Net.Sockets.SocketException" foi gerada no System.dll, mas não consigo detectá-la. Por que isso acontece? Eu também tentei pegar qualquer exceção genérica com um

catch
{
}

block, mas isso também não funcion

Qualquer ajuda será apreciada

EDIT: depois de tentar mais algumas vezes, eu realmente descobri que o SocketException não é gerado. Isso é tão estranho, como eu disse em um comentário, na situação oposta, quando o cliente é fechado antes do servidor, a exceção é levantada e eu não consigo. Eu realmente não sei o que está acontecendo ....

questionAnswers(6)

yourAnswerToTheQuestion