在linux2.6.x内核中,对epoll做了全面支持,但是在使用EPOLLRDHUP判断socket连接客户端断开时,编译器会提示找不到EPOLLRDHUP的定义,EPOLLRDHUP undefined,根据官方文档EPOLLRDHUP在v2.6.17已经支持
EPOLLRDHUP (since kernel 2.6.17)
Stream socket peer closed connection, or shut down writing half
of connection. (This flag is especially useful for writing sim-
ple code to detect peer shutdown when using Edge Triggered moni-
toring.)
有点不理解实际上对EPOLLRDHUP的支持并没有更新到epoll.h中,疏忽?
在google上一阵搜索后,没有发现有价值的中文网页(基本就没有相关的中文资料),在老外的帖子中,发现很多人还是提到了这个问题,并声称有相关补丁,我没下到,但还是从这些帖子中研究出了解决方法.
切换到root用户,修改linux中/usr/include/sys/epoll.h文件加入
EPOLLRDHUP = 0x2000,
#define EPOLLRDHUP EPOLLRDHUP
两行,保存退出。
重新编译自己程序,测试关闭远程连接,服务器收到EPOLLRDHUP码,成功。
yule_123 于 2008-07-04 17:10:44发表:
晕 我刚写的文章就被盗了 也不注明出处
http://blog.sina.com.cn/s/blog_56b8dee801009ud2.html 看这里才是
不是出自: http://www.linuxdiyf.com