红联Linux门户
Linux帮助

epoll中EPOLLRDHUP无定义问题的解决

发布时间:2008-07-03 15:50:41来源:红联作者:bitrated
  在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码,成功。
文章评论

共有 1 条评论

  1. yule_123 于 2008-07-04 17:10:44发表:

    晕 我刚写的文章就被盗了 也不注明出处
    http://blog.sina.com.cn/s/blog_56b8dee801009ud2.html 看这里才是
    不是出自: http://www.linuxdiyf.com