2013-01-15 51 views
-1

我在尝试执行两个线程之间的TCP隧道时遇到此问题。epoll问题:隧道和多线程

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并发送连接信息到远程。因此这两个线程都无法取得进展。

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

谢谢你的洞察力。

+0

你的代码和伪代码一样好,并且线程2肯定会运行,而1被卡在accept中。也许发布实际的代码? – bmargulies

回答

0

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