En el cliente, tengo una¿Por qué este servidor que escribo no detecta que el cliente ha cerrado el socket?
close(sockfd)
donde sockfd es la toma que está conectado al servidor. En el servidor Tengo esto:
if (sockfd.revents & POLLERR ||
desc_set[i].revents & POLLHUP || desc_set[i].revents & POLLNVAL) {
close(sockfd.fd);
printf("Goodbye (connection closed)\n");
}
Dónde sockfd es un pollfd estructura y sockfd.fd es el descriptor de archivo de socket del cliente.
Cuando el cliente cierra el socket como lo puse allí, el servidor no parece detectarlo con el segundo código (desc_set [i] .revents & POLLHUP, etc.).
¿Alguien sabe cuál es el problema?
Lo siento por hacer una pregunta de novato, pero ¿cómo incluyo esa extensión de GNU en mi código? – dasen
#define _GNU_SOURCE antes de cualquier #includes lo hará. Hacer la llamada al servidor close() de su propio libre albedrío una vez que se sirve la solicitud es mucho, mucho más agradable. – Flexo
He usado esa extensión de GNU, pero todavía no se cierra en el lado del servidor. – dasen