typedef struct peer {
sel_file sf;
- dh_pub kpub;
const char *name;
struct filter *f;
} peer;
static void addpeer(unsigned ac, char **av)
{
- key_packstruct kps[DH_PUBFETCHSZ];
- key_packdef *kp;
struct hostent *h;
struct sockaddr_in sin;
int len = PKBUFSZ;
peer *p;
int fd;
- int e;
if (ac != 4)
die(1, "syntax: peer:NAME:PORT:ADDR:PORT");
if (npeer >= 2)
die(1, "enough peers already");
+ if (!key_bytag(&keys, av[0]))
+ die(1, "no key named `%s'", av[0]);
p = &peers[npeer++];
p->name = xstrdup(av[0]);
- kp = key_fetchinit(dh_pubfetch, kps, &p->kpub);
- e = key_fetchbyname(kp, &keys, av[0]);
- key_fetchdone(kp);
- if (e)
- die(1, "key_fetch `%s': %s", av[0], key_strerror(e));
if ((fd = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
die(1, "socket: %s", strerror(errno));
fdflags(fd, O_NONBLOCK, O_NONBLOCK, FD_CLOEXEC, FD_CLOEXEC);
parse(argv[i]);
if (npeer != 2)
die(1, "need two peers");
- for (;;)
- sel_select(&sel);
+ for (;;) {
+ if (sel_select(&sel) && errno != EINTR)
+ die(1, "select failed: %s", strerror(errno));
+ }
#undef f_bogus
}