相同的套接字读取和写入由 2 个不同的线程完成,每个线程都有 EPOLL 处理程序

Same socket read and write done by 2 different threads with EPOLL Handler per each thread

提问人:aKumara 提问时间:6/16/2023 更新时间:6/16/2023 访问量:33

问:

与此相关的问题有很多。但是我找不到与我的情况相匹配的问题。
基本上我的设置如下 [Linux],
创建一个非阻塞的 Linux TCP 套接字并将其移交给 2 个线程(一个读取器和另一个写入器)。每个线程都有自己的 EPOLL 处理程序(使用 epoll_create1 创建)。在每个线程上,当套接字共享
时 (1) 读取器线程:socket(FD) 立即添加到带有事件 EPOLLIN 的 epoll 处理程序(epoll_ctl)中。
(2) Writer thread :将 s 写入套接字 (FD)。如果 write 返回较少的写入计数 比预期的(即 TCP 缓冲条件),然后将 FD 添加到带有事件 EPOLLOUT 的 Epoll 处理程序(编写器线程)中,并且写入暂停epoll_wait直到返回套接字是可写的(之后从此 epoll 处理程序中删除 FD)
我的问题是,

  1. 您认为这种方法有什么注意事项吗?

  2. 如果套接字被远程端关闭,Reader Thread 可以检测到它(在大多数情况下),因为它位于 Epoll 处理程序中(并且epoll_wait连续调用)。但是,Writer 线程如何在写入失败检测到远程端闭包之前检测到它(例如,在写入完成较大时间间隔的情况下)?如果我只是为了检测断开连接而添加它 EPoll 处理程序,我应该对 epoll_event::events 使用什么(例如 EPOLLRDHUP 和/或 EPOLLHUP 或任何其他)?

Linux 多线程 套接字 epoll

评论


答: 暂无答案