C # SocketException no queda atrapado

Tengo una situación realmente extraña en mi código. Estoy desarrollando una aplicación cliente-servidor de chat C #. Cuando cierro el servidor, quiero que el cliente se cierre automáticamente. El cliente está leyendo el objeto TcpClient usando un StremReader. El cliente está en un ciclo while donde lee una línea (StreamReader.ReadLine ()) y luego realiza algunas operaciones con la línea que lee. Cuando se cierra el servidor, también cierro la conexión tcp del lado del servidor. Por lo tanto, espero que el cliente vea una SocketException causada por la línea de lectura, la capture y salga. ¡Pero la excepción no queda atrapada! Aquí está el código de bucle del cliente:

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

Cuando cierro el servidor, Visual Studio me dice que se produjo una excepción de primera oportunidad "System.Net.Sockets.SocketException" en System.dll, pero no puedo detectarla. ¿Por qué sucede eso? También intenté detectar cualquier excepción genérica con una

catch
{
}

block, pero eso tampoco funciona.

¡Cualquier ayuda será apreciada!

EDIT: después de intentarlo más veces, descubrí que SocketException no se eleva en absoluto. Eso es tan extraño, como dije en un comentario, en la situación opuesta, cuando el cliente se cierra antes que el servidor, se genera la excepción y no puedo hacerlo. Realmente no sé qué está pasando ...