我想使用epoll和EPOLLET编写多线程TCP侦听器。
我看到有几种可能性:
bind()使用SO_REUSEPORT (但只使用UPLinux内核3.9)并处理自己的连接。在这种情况下不需要EPOLLONESHOT,因为每个线程都处理自己的文件描述符。pthread_cond_signal(),但随后需要互斥和条件变量。EPOLLONESHOT,所以不是所有的线程都会为相同的事件被唤醒。我知道,如果使用EPOLLET,一旦收到关于事件的通知,我就必须耗尽fd,直到得到EAGAIN为止。
如果套接字选项SO_REUSEPORT不受支持(旧内核),那么哪个选项最好?
发布于 2016-03-19 17:15:12
SO_REUSEPORT的解决方案是拥有一个公共的epoll和一个在所有线程之间共享的公共侦听器。EPOLLONESHOT是必需的,因此一次只有一个线程处理特定fd的事件。发布于 2016-03-12 20:53:52
https://stackoverflow.com/questions/35961689
复制相似问题