Cómo determinar que una conexión de socket está cerrada
1) Configure el socket receptor en modo asincrónico
2) Utilice la función select() para probar si el socket es legible
3) Si la función select() devuelve A; El valor de 1, pero la longitud de los datos leídos usando la función recv() es 0, indica que el socket se ha desconectado.
4) Si el valor de retorno de recv() es menor o igual a 0, significa que la conexión del cliente se ha desconectado y también es necesario determinar si errno es igual a EINTR. Si errno = EINTR, significa que la función recv () regresa después de que el programa recibe una señal de interrupción. En este momento, la conexión del socket aún debería ser normal y este paso debería cerrar la conexión del socket.