im Client Ich habe einWarum erkennt dieser Server nicht, dass der Client den Socket für ihn geschlossen hat?
close(sockfd)
wo sockfd die Buchse, die mit dem Server verbunden sind. Im Server ich dies habe:
if (sockfd.revents & POLLERR ||
desc_set[i].revents & POLLHUP || desc_set[i].revents & POLLNVAL) {
close(sockfd.fd);
printf("Goodbye (connection closed)\n");
}
Wo sockfd eine Struktur pollfd ist, und sockfd.fd ist der Dateideskriptor des Sockels des Kunden.
Wenn der Client den Socket schließt, wie ich dort aufstellte, scheint der Server es nicht mit dem zweiten Code zu erkennen (desc_set [i] .revents & POLLHUP, etc.).
Weiß jemand, was ist das Problem?
Entschuldigen Sie, dass Sie eine solche Frage stellen, aber wie kann ich diese GNU-Erweiterung in meinen Code integrieren? – dasen
#define _GNU_SOURCE vor jedem # includes wird es tun. Der Server calling close() von seinem eigenen freien Willen, sobald es die Anfrage bedient wird, ist eine viel, viel schönere Art und Weise. – Flexo
Ich habe diese GNU-Erweiterung verwendet, aber sie schließt immer noch nicht auf der Serverseite. – dasen