Nel client, ho unPerché questo server che ho scritto non rileva che il client ha chiuso il socket?
close(sockfd)
dove sockfd è la presa che è collegato al server. Nel server ho questo:
if (sockfd.revents & POLLERR ||
desc_set[i].revents & POLLHUP || desc_set[i].revents & POLLNVAL) {
close(sockfd.fd);
printf("Goodbye (connection closed)\n");
}
Dove sockfd è un pollfd struct, e sockfd.fd è il descrittore di file della presa del cliente.
Quando il client chiude il socket come ho messo lì, il server non sembra rilevare con il secondo codice (desc_set [i] .revents & POLLHUP, etc.).
Qualcuno sa qual è il problema?
Ci scusiamo per aver fatto una domanda simile a un principiante, ma come includere l'estensione GNU nel mio codice? – dasen
#define _GNU_SOURCE prima di qualsiasi #include lo farà. Rendere la chiamata del server close() del proprio libero arbitrio una volta che è stata soddisfatta la richiesta è un modo molto, molto più carino. – Flexo
Ho usato quell'estensione GNU, ma non si chiude ancora sul lato server. – dasen