在tcp套接字上生成EPOLLRDHUP事件

时间:2016-02-15 13:27:34

标签: multithreading sockets tcp epoll

如何以编程方式使用其他线程在我的tcp套接字上触发EPOLLRDHUP事件,

我已经使用EPOLLRDHUP事件添加了epoll实例并尝试生成事件,但它修改了该FD上的事件,不要触发它,

我希望我的第一个线程持续等待事件与epoll_wait(),应该从EPOLLRDHUP接收事件,一旦其他线程触发它,我无法得到如何触发该事件,我尝试使用在另一个线程中编写系统调用但是也没有触发套接字FD上的事件我想,民意调查应该来自阻塞循环是我的要求,请帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

您无法在另一个线程的同一文件描述符上生成epoll事件,EPOLLRDHUP将根据TCP连接另一端发生的事情生成。

如果你有一个线程等待epoll_wait()并且你想要从另一个线程唤醒该线程,你应该创建一个pipe(),让你的epoll_wait等待读取端的读取事件除了任何TCP套接字之外的管道。当你想要唤醒你的线程时,你会在管道的写入端写一个字节。

(可以使用eventfd代替管道来实现相同的目标)