in threads.c [169:200]
static void create_listener_threads(struct tctl *ctl, struct netconsd_params *p)
{
struct ncrx_prequeue *prequeues;
struct ncrx_listener *cur, *listeners;
int i, r;
listeners = calloc(p->nr_listeners, sizeof(*listeners));
if (!listeners)
fatal("Couldn't allocate listeners: %m\n");
for (i = 0; i < p->nr_listeners; i++) {
cur = &listeners[i];
prequeues = calloc(ctl->nr_workers, sizeof(*prequeues));
if (!prequeues)
fatal("ENOMEM %d/%d\n", i, p->nr_listeners);
cur->thread_nr = i;
cur->prequeues = prequeues;
cur->workers = ctl->workers;
cur->nr_workers = ctl->nr_workers;
cur->batch = p->mmsg_batch;
cur->address = &p->listen_addr;
r = pthread_create(&cur->id, NULL, udp_listener_thread, cur);
if (r)
fatal("%d/%d failed: -%d\n", i, p->nr_listeners, r);
}
ctl->nr_listeners = p->nr_listeners;
ctl->listeners = listeners;
}