¿Cómo determina el socket vb.net que la conexión entre el cliente y el servidor está desconectada?
Puede juzgar en función de la longitud de los datos recibidos por el servidor. Si la longitud de los datos recibidos por el servidor es 0, significa que su programa cliente se ha desconectado. Desde la perspectiva de la pila de protocolos TCP/IP, el programa cliente cierra la mitad de la conexión escrita por él mismo y envía un FIN al servidor. Esto implica la migración del estado de TCP. Para obtener conocimientos en esta área, se recomienda leer el Volumen 1 "Explicación detallada de TCP/IP" del Sr. Richard Stevens y el Volumen 1 "Programación de redes Unix", que tienen explicaciones detalladas.
En cuanto a su segunda pregunta, le sugiero que observe más de cerca el código del programa de su servidor. El programa del servidor primero debe establecer un socket de escucha. Cuando un cliente se conecta, el servidor aceptará la conexión del cliente en un nuevo socket. Así que no hay ningún problema de "caos". Respecto a este tema, también te recomiendo que leas los dos libros clásicos sobre programación de redes mencionados anteriormente.