zoukankan      html  css  js  c++  java
  • epoll

    注册已经注册的fd会raises an IOError–和poll注册刚好相反

    EPOLLIN Available for read
    EPOLLOUT Available for write
    EPOLLPRI Urgent data for read
    EPOLLERR Error condition happened on the assoc. fd 本端错误
    EPOLLHUP Hang up happened on the assoc. fd HUP(挂断)事件表示客户端套接字已断开连接
    EPOLLET Set Edge Trigger behavior, the default is Level Trigger behavior边沿触发
    EPOLLONESHOT Set one-shot behavior. After one event is pulled out, the fd is internally disabled


    1、listen fd,有新连接请求,触发EPOLLIN。
    2、对端发送普通数据,触发EPOLLIN。
    3、带外数据,只触发EPOLLPRI。
    4、对端正常关闭(程序里close(),shell下kill或ctr+c),触发EPOLLIN和EPOLLRDHUP,但是不触发EPOLLERR和EPOLLHUP

    这个好像有些系统检测不到,可以使用EPOLLIN,read返回0,删除掉事件,关闭close(fd);
    如果有EPOLLRDHUP,检测它就可以知道是对方关闭;否则就用上面方法。

    5、对端异常断开连接(只测了拔网线),没触发任何事件。

    EPOLLERR 只有采取动作时,才能知道是否对方异常。即对方突然断掉,是不可能
    有此事件发生的。只有自己采取动作(当然自己此刻也不知道),read, write时,出EPOLLERR错,说明对方已经异常断开。
    EPOLLERR 是服务器这边出错(自己出错当然能检测到,对方出错你咋能直到啊


    fd的关闭会导致它从所有epoll集合中自动删除吗?
    是,但请手动删除。


    如果将相同的fd添加到epoll_set两次会发生什么?
    你可能会得到EEXIST(python报错)。然而,有可能两个线程可以添加相同的fd两次。这是一个无害的条件。

  • 相关阅读:
    Whidbey 开发
    构建软件数字安全带系列课程
    微软产品生命周期模型系列课程
    Windows Mobile 2nd 开发黄金周
    微软高性能运算系列课程
    _tmain()和main()区别
    简单工厂模式&工厂方法模式
    单例模式
    java中去除字符串(String)中的换行字符(\r \n \t)
    阿里巴巴 Java开发手册1.4.0
  • 原文地址:https://www.cnblogs.com/newpython/p/6392504.html
Copyright © 2011-2022 走看看