epoll问题:隧道和多线程

时间:2013-01-15 01:21:30

标签: multithreading tcp epoll

我尝试在两个线程之间进行TCP隧道时遇到此问题。

Thread 1
  listen at Port
  accept
  then add the sock after accept to epoll_ctl
  while (1)
    epoll_wait
    read whatever from Port to remote (tunnelling)


Thread 2
  connect to Port
  if connected 
    communicate...

我实际观察到的是:当线程2在连接时被阻塞时,线程1没有机会运行epoll_wait并将连接信息发送到远程。因此两个线程都无法取得进展。

一种可能的解决方案是使用父子进程而不是多线程。但在我切换到那之前,还能用多线程完成吗?我认为这里需要的是某种中断而不仅仅是轮询。对?

感谢您的见解。

1 个答案:

答案 0 :(得分:0)

您可以将服务器端套接字描述符添加到epoll_ctl中。但我很好奇,如果thread2在连接上被阻止,你需要向服务器发送什么信息?谢谢你的提示。