+ /*
+ * Set up socket.
+ */
+
+ admin_fd = socket(admin_addr.sin_family, SOCK_DGRAM, 0);
+ if (admin_fd < 0) {
+ status = errno;
+ goto bad;
+ }
+
+ bzero((char *)&my_addr, sizeof(my_addr));
+
+ my_addr.sin_family = admin_addr.sin_family;
+ my_addr.sin_addr.s_addr = gethostid();
+
+ if (bind(admin_fd, &my_addr, sizeof(my_addr)) < 0) {
+ status = errno;
+ goto bad;
+ }
+
+ my_addr_len = sizeof(my_addr);
+
+ if (getsockname(admin_fd, (struct sockaddr *)&my_addr,
+ &my_addr_len) < 0) {
+ status = errno;
+ goto bad;
+ }
+
+ if (ioctl(admin_fd, FIONBIO, (char *)&on) < 0) {
+ status = errno;
+ goto bad;
+ }
+