{ fam = "ANY"; af = AF_UNSPEC; i++; }
else for (j = 0; j < NADDRFAM; j++) {
if (mystrieq(av[i], aftab[j].name)) {
- if (udpsock[j].fd < 0) {
+ if (udpsock[j].sf.fd < 0) {
a_fail(a, "disabled-address-family", "%s", aftab[j].name, A_END);
goto fail;
}
aihint.ai_flags = AI_NUMERICHOST;
if (!getaddrinfo(av[i], 0, &aihint, &ailist)) {
for (ai = ailist; ai; ai = ai->ai_next) {
- if ((j = afix(ai->ai_family)) >= 0 && udpsock[j].fd >= 0)
+ if ((j = afix(ai->ai_family)) >= 0 && udpsock[j].sf.fd >= 0)
break;
}
if (!ai) {
#ifdef HAVE_LIBADNS
qf = adns_qf_search;
for (j = 0; j < NADDRFAM; j++) {
- if ((af == AF_UNSPEC || af == aftab[i].af) && udpsock[j].fd >= 0)
+ if ((af == AF_UNSPEC || af == aftab[i].af) && udpsock[j].sf.fd >= 0)
qf |= aftab[j].qf;
}
if ((err = adns_submit(ads, r->addr, adns_r_addr, qf, r, &r->q)) != 0) {
a_bgfail(&r->bg, "resolve-error", "%s", r->addr, A_END);
goto fail_release;
}
- if (udpsock[AFIX_INET].fd < 0) {
+ if (udpsock[AFIX_INET].sf.fd < 0) {
a_bgfail(&r->bg, "disabled-address-family", "INET", A_END);
goto fail_release;
}
a_fail(a, "unknown-address-family", "%s", av[0], A_END);
return;
found:
- if (udpsock[i].fd < 0) {
+ if (udpsock[i].sf.fd < 0) {
a_fail(a, "disabled-address-family", "%s", aftab[i].name, A_END);
return;
}
} else {
for (i = 0; i < NADDRFAM; i++)
- if (udpsock[i].fd >= 0) goto found;
+ if (udpsock[i].sf.fd >= 0) goto found;
abort();
}
a_info(a, "%u", p_port(i), A_END);
/*----- Global state ------------------------------------------------------*/
-sel_file udpsock[NADDRFAM];
+udpsocket udpsock[NADDRFAM];
/*----- Static variables --------------------------------------------------*/
return (-1);
}
IF_TRACING(T_PEER, trace_block(T_PACKET, "peer: sending packet", p, sz); )
- if (sendto(udpsock[i].fd, p, sz, 0, &a->sa, sasz) < 0) {
+ if (sendto(udpsock[i].sf.fd, p, sz, 0, &a->sa, sasz) < 0) {
a_warn("PEER", "?ADDR", a, "socket-write-error", "?ERRNO", A_END);
return (-1);
}
}
IF_TRACING(T_PEER, trace_block(T_PACKET, "peer: sending packet",
BBASE(&p->b), BLEN(&p->b)); )
- if (sendto(udpsock[p->afix].fd, BBASE(&p->b), BLEN(&p->b),
+ if (sendto(udpsock[p->afix].sf.fd, BBASE(&p->b), BLEN(&p->b),
0, &p->spec.sa.sa, sasz) < 0) {
a_warn("PEER", "?PEER", p, "socket-write-error", "?ERRNO", A_END);
return (0);
addr a;
socklen_t sz;
- for (i = 0; i < NADDRFAM; i++) udpsock[i].fd = -1;
+ for (i = 0; i < NADDRFAM; i++) udpsock[i].sf.fd = -1;
for (ai = ailist; ai; ai = ai->ai_next) {
if ((i = afix(ai->ai_family)) < 0) continue;
- if (udpsock[i].fd != -1) continue;
+ if (udpsock[i].sf.fd != -1) continue;
/* --- Note on socket buffer sizes --- *
*
strerror(errno));
}
fdflags(fd, O_NONBLOCK, O_NONBLOCK, FD_CLOEXEC, FD_CLOEXEC);
- sel_initfile(&sel, &udpsock[i], fd, SEL_READ, p_read, 0);
- sel_addfile(&udpsock[i]);
+ sel_initfile(&sel, &udpsock[i].sf, fd, SEL_READ, p_read, 0);
+ sel_addfile(&udpsock[i].sf);
T( trace(T_PEER, "peer: created %s socket", aftab[i].name); )
if (!port) {
sz = sizeof(a);
addr a;
socklen_t sz = sizeof(addr);
- if (getsockname(udpsock[i].fd, &a.sa, &sz))
+ if (getsockname(udpsock[i].sf.fd, &a.sa, &sz))
die(EXIT_FAILURE, "couldn't read port number: %s", strerror(errno));
return (getport(&a));
}
typedef struct peer_iter { sym_iter i; } peer_iter;
+typedef struct udpsocket {
+ sel_file sf; /* Selector for the socket */
+} udpsocket;
+
typedef struct ping {
struct ping *next, *prev; /* Links to next and previous */
peer *p; /* Peer so we can free it */
extern octet buf_i[PKBUFSZ], buf_o[PKBUFSZ], buf_t[PKBUFSZ], buf_u[PKBUFSZ];
extern const tunnel_ops *tunnels[]; /* Table of tunnels (0-term) */
extern const tunnel_ops *tun_default; /* Default tunnel to use */
-extern sel_file udpsock[NADDRFAM]; /* The master UDP sockets */
+extern udpsocket udpsock[NADDRFAM]; /* The master UDP sockets */
extern kdata *master; /* Default private key */
extern const char *tag_priv; /* Default private key tag */