+ if (outf) {
+ salen = sizeof(addr);
+ if (getsockname(fd, &addr.sa, &salen))
+ die(1, "getsockname: %s", strerror(errno));
+ switch (addr.sa.sa_family) {
+ case AF_INET: port = ntohs(addr.sin.sin_port); break;
+ case AF_INET6: port = ntohs(addr.sin6.sin6_port); break;
+ default: assert(0);
+ }
+ fp = fopen(outf, "w");
+ if (!fp) die(1, "fopen(%s): %s", outf, strerror(errno));
+ fprintf(fp, "%d\n", port);
+ fclose(fp);
+ }