Я использую libnetfilter_queue для модификации пользовательского пространства входящих / исходящих пакетов.Я использовал однопоточную модель.Но я обнаружил, что из ядра 2.6.31 возможно иметь разные очереди для разных соединений.поэтому я бродил, можно ли управлять каждой очередью в разных потоках.
обычно я настраиваю обработку очереди, как показано ниже:
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 в отдельных потоках, так что я пакеты могут быть извлечены из очередей параллельно.
РЕДАКТИРОВАТЬ: я предоставляю свой код, если кто-то нуждается в них, чтобы понять мою проблему.вставка всех кодов здесь кажется необоснованной, поскольку это создает визуальный шум.