私は 送受信パケットのユーザー空間を変更するためにlibnetfilter_queueを使用しています。私は単一のスレッドモデルを使用しています。 しかし、私は2.6.31カーネルから、異なる接続のために異なるキュー を持つことが可能であることを発見しました。ので、その 異なるスレッドで各キューを管理することができれば私はさまよっていた。netfilter_queue:マルチスレッド環境で--queue-balanceを使用する
は、通常、私は怒鳴るように扱うキューを設定:
struct nfq_handle * h = nfq_open();
nfq_unbind_pf(h, AF_NET);
nfq_bind_pf(h,m AF_NET);
struct nfq_q_handle(h, 0, &cb, NULL);
nfq_set_mode(qh, NFQNL_COPY_PACKET, 0xffff);
私は100個のキューのように管理したい場合は、今、私は初期化するために、その上に 構造やループをH、QHとque_numをパックします。
は今、私の質問は:
私はメインスレッドで上記初期化して別々のスレッドでコールバック を実行する場合、それは十分 pthread_createのために与えられます関数の中でも、ループを実行することです()?コールバックはスレッドで実行されますか?
確かに分かりませんが、nfq_set_verdictが返されたときにパケットが キューからポップされています。だから、 nfq_set_verdictを別のスレッドで実行して、iパケットを キューから並列にポップできるようにする必要があります。
EDIT:誰かに自分の問題を理解する必要がある場合は、私のコードを提供します。ここですべてのコードを貼り付けると、視覚的なノイズが発生するので不合理なようです。
1つのスレッドでこれを行うのが遅すぎますか?そうでない場合、なぜあなたはそれにスレッドを投げるために飛び跳ねていますか?人々は実際にそれを考えずに、スレッドレバーをあまりにも頻繁に投げます。 – tbert