- if ((fd_udp = socket(PF_INET, SOCK_DGRAM, 0)) < 0 ||
- bind(fd_udp, (struct sockaddr *)&udp_me, sizeof(udp_me)) ||
- connect(fd_udp, (struct sockaddr *)&udp_peer, sizeof(udp_peer)) ||
+ if (connhost) {
+ initaddr(&tmpaddr);
+ parseaddr(connhost, 0, paf_parse, &tmpaddr);
+ if ((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0 ||
+ (bindhost &&
+ bind(fd, (struct sockaddr *)&bindaddr, sizeof(bindaddr))) ||
+ connect(fd, (struct sockaddr *)&tmpaddr, sizeof(tmpaddr)))
+ die(1, "couldn't connect to TCP server: %s", strerror(errno));
+ if (nonblockify(fd) || cloexec(fd))
+ die(1, "couldn't connect to TCP server: %s", strerror(errno));
+ }
+
+ initaddr(&tmpaddr);
+ parseaddr(argv[optind], 0, paf_parse, &tmpaddr);
+ if ((fd_udp = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0 ||
+ nonblockify(fd_udp) || cloexec(fd_udp) ||