signal(SIGPIPE, SIG_IGN);
for (i = 0; tunnels[i]; i++)
tunnels[i]->init();
- p_init(ailist); freeaddrinfo(ailist);
+ p_init();
+ p_bind(ailist); freeaddrinfo(ailist);
if (!(f & f_daemon)) {
af = AF_WARN;
#ifndef NTRACE
af |= AF_FOREGROUND;
a_create(STDIN_FILENO, STDOUT_FILENO, af);
}
- ps_split(f & f_daemon);
- a_init(csock, u, g, csockmode);
+
+ for (i = 0; tunnels[i]; i++) {
+ if (tunnels[i]->flags&TUNF_PRIVOPEN) {
+ ps_split(f & f_daemon);
+ break;
+ }
+ }
+
+ a_init();
+ a_signals();
+ a_listen(csock, u, g, csockmode);
+ a_switcherr();
u_setugid(u, g);
km_init(kr_priv, kr_pub, tag_priv);
kx_init();