在客户端,我有一个为什么我写的这个服务器检测不到客户端已经关闭了它的套接字?
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