- initaddr(&cw.me);
- if (bindhost || bindsvc) {
- initaddr(&bindaddr);
- if (!bindsvc) parseaddr(bindhost, 0, 0, &bindaddr);
- else parseaddr(bindhost, bindsvc, 0, &cw.me);
+ DA_CREATE(&cw.me); DA_CREATE(&cw.peer);
+
+ n = DA_LEN(&bindhosts);
+ if (n || bindsvc) {
+ if (!n) {
+ initaddr(&tmpaddr);
+ parseaddr(0, bindsvc, 0, &tmpaddr);
+ pushaddr(&cw.me, &tmpaddr);
+ } else if (!bindsvc) {
+ if (n != 1) die(1, "can only bind to one address as client");
+ initaddr(&bindaddr);
+ parseaddr(DA(&bindhosts)[0], 0, 0, &bindaddr);
+ } else for (i = 0; i < n; i++) {
+ initaddr(&tmpaddr);
+ parseaddr(DA(&bindhosts)[i], bindsvc, 0, &tmpaddr);
+ pushaddr(&cw.me, &tmpaddr);
+ }
+ if (bindsvc) {
+ cw.f |= cwf_port;
+ n = DA_LEN(&cw.me);
+ cw.sfv = xmalloc(n*sizeof(*cw.sfv));
+ }