相关疑难解决方法(0)

我如何使用EPOLLHUP

你们能为我提供一个很好的示例代码,使用EPOLLHUP进行死对等处理吗?我知道这是一个检测用户断开连接但不确定如何在代码中使用它的信号.谢谢提前..

linux networking epoll

20
推荐指数
1
解决办法
2万
查看次数

如何处理EPOLLERR和EPOLLHUP?

我阅读了libevent epoll中的代码,下面是代码:

       if (what & (EPOLLHUP|EPOLLERR)) {
            ev = EV_READ | EV_WRITE;
        } else {
            if (what & EPOLLIN)
                ev |= EV_READ;
            if (what & EPOLLOUT)
                ev |= EV_WRITE;
            if (what & EPOLLRDHUP)
                ev |= EV_CLOSED;
        }
Run Code Online (Sandbox Code Playgroud)

据我了解,当发生EPOLLERR或EPOLLHUP时,应关闭连接。但是在上面的代码中,当遇到EPOLLHUP | EPOLLERR时,事件掩码设置为EV_READ | EV_WRITE。所以我的问题是:

  • 是什么使EPOLLERR和EPOLLHUP发生?
  • 当发生EPOLLERR和EPOLLHUP时,程序应在事件句柄功能中做什么?并请详细解释其背后的原因。

提前致谢!

linux network-programming

6
推荐指数
1
解决办法
5400
查看次数

当EPOLLHUP看起来足够时,为什么我们需要EPOLLRDHUP?

根据linux 手册页,

EPOLLHUP

从诸如管道或流套接字的通道读取时,此事件仅表示对等方关闭其通道的末尾.

EPOLLRDHUP

流套接字对等关闭连接,或关闭写入一半的连接.

我几乎无法区分EPOLLHUPEPOLLRDHUP.

对我来说,无论何时EPOLLRDHUP使用EPOLLHUP都可以使用相同的语义.

我对吗?如果没有,有什么解释吗?

c linux networking epoll api-design

6
推荐指数
1
解决办法
432
查看次数

标签 统计

linux ×3

epoll ×2

networking ×2

api-design ×1

c ×1

network-programming ×1