在客戶端,我有一個爲什麼我寫的這個服務器檢測不到客戶端已經關閉了它的套接字?
close(sockfd)
其中的sockfd是已連接到服務器的插槽。 在我有了這個服務器:
if (sockfd.revents & POLLERR ||
desc_set[i].revents & POLLHUP || desc_set[i].revents & POLLNVAL) {
close(sockfd.fd);
printf("Goodbye (connection closed)\n");
}
其中的sockfd是一個結構的pollfd和sockfd.fd是客戶端的套接字的文件描述符。
當客戶端像我放在那裏關閉套接字時,服務器似乎沒有用第二個代碼(desc_set [i] .revents & POLLHUP等)檢測到它。
有誰知道有什麼問題?
對不起,我們要如何將這個GNU擴展插入到我的代碼中? – dasen 2010-11-12 16:05:19
#define _GNU_SOURCE在任何#includes之前都會這樣做。使它自己的免費服務器調用close()一旦被服務請求是一個更好,更好的方法。 – Flexo 2010-11-12 16:07:12
我已經使用了GNU擴展,但它仍然沒有在服務器端關閉。 – dasen 2010-11-12 16:11:11