epoll:当我在同一事件中获得EPOLLOUT和EPOLLHUP时,什么是合适的行为?

时间:2016-02-05 16:16:00

标签: c linux nginx epoll

第一次epoll()用户。我正在使用epoll编写一个简单的HTTP客户端,以连接到我控制的主机上的nginx Web服务器。

以下是我正在查看的这一系列事件

  1. 我关闭(服务器)主机
  2. 我启动了我的客户端,其socket()epoll_create1()epoll_ctl()connect()epoll_wait(EPOLLOUT)我认为是正确的
  3. 我启动主机
  4. Web服务器启动后,epoll_wait()完成并返回一个事件。
  5. 通常,epoll_wait()返回的事件仅为EPOLLOUT。但是,每隔5次尝试,我就会EPOLLOUT|EPOLLHUP。我不知道该怎么做。

    nginx这是否正确? EPOLLOUT|EPOLLHUP甚至有意义吗? 我应该忽略EPOLLHUP,只是忽略send()我的数据并检查返回值吗?忽略HUP感觉很奇怪...但我是epoll的新手,而且据我所知,这些东西一直都在发生。

    我希望客户端做的就是发送一个简单的HTTP GET请求,然后重新获得响应。

    谢谢!

    修改

    自最初发布以来,完全重写了这个问题。如果这不是SO批准的,我很抱歉。

1 个答案:

答案 0 :(得分:1)

通过实验,我发现在调用connect()之前在刚刚创建的套接字上启用EPOLLOUT会触发EPOLLOUT | EPOLLHUP事件。我做的是先做一个connect(),验证它是否返回EINPROGRESS,然后启用EPOLLOUT。