-1

2 つのスレッド間で 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 つは、マルチスレッドの代わりに親子プロセスを使用することです。しかし、それに切り替える前に、マルチスレッドでそれを行うことはできますか? ここで必要なのは、単なるポーリングではなく、ある種の割り込みだと思います。右?

洞察をありがとう。

4

1 に答える 1

0

サーバー側のソケット記述子をepoll_ctlに追加できます。しかし、thread2が接続でブロックされた場合、サーバーにどのような情報を送信する必要があるのでしょうか。ヒントをありがとう。

于 2013-01-15T01:28:09.713 に答える