- FILE *peer_file, *output;
- int sock, peer, err;
+ FILE *peer_file = NULL, *output = NULL;
+ int sock = -1, peer, err;
struct sockaddr_in addr, peer_addr;
struct hostent *hostinfo;
socklen_t peer_addr_len;
int reuse;
int background;
struct sockaddr_in addr, peer_addr;
struct hostent *hostinfo;
socklen_t peer_addr_len;
int reuse;
int background;
if (output == NULL) {
fprintf (stderr, "Failed to open %s for writing: %s\n",
output_filename, strerror (errno));
if (output == NULL) {
fprintf (stderr, "Failed to open %s for writing: %s\n",
output_filename, strerror (errno));
}
sock = socket (AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
fprintf (stderr, "Error: socket() failed: %s\n",
strerror (errno));
}
sock = socket (AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
fprintf (stderr, "Error: socket() failed: %s\n",
strerror (errno));
}
hostinfo = gethostbyname ("localhost");
if (hostinfo == NULL) {
fprintf (stderr, "Unknown host: localhost\n");
}
hostinfo = gethostbyname ("localhost");
if (hostinfo == NULL) {
fprintf (stderr, "Unknown host: localhost\n");
}
memset (&addr, 0, sizeof (addr));
addr.sin_family = AF_INET;
}
memset (&addr, 0, sizeof (addr));
addr.sin_family = AF_INET;
addr.sin_addr = *(struct in_addr *) hostinfo->h_addr;
err = bind (sock, (struct sockaddr *) &addr, sizeof (addr));
if (err) {
fprintf (stderr, "Error: bind() failed: %s\n",
strerror (errno));
close (sock);
addr.sin_addr = *(struct in_addr *) hostinfo->h_addr;
err = bind (sock, (struct sockaddr *) &addr, sizeof (addr));
if (err) {
fprintf (stderr, "Error: bind() failed: %s\n",
strerror (errno));
close (sock);
+ ret = 1;
+ goto DONE;
+ }
+
+ addrlen = sizeof (addr);
+ err = getsockname (sock, (struct sockaddr *) &addr, &addrlen);
+ if (err) {
+ fprintf (stderr, "Error: getsockname() failed: %s\n",
+ strerror (errno));
+ close (sock);
+ ret = 1;
+ goto DONE;
}
/* Reached if pid == 0 (the child process). */
/* Close stdout so that the one interested in pid value will
}
/* Reached if pid == 0 (the child process). */
/* Close stdout so that the one interested in pid value will
}
peer_file = fdopen (peer, "w+");
if (peer_file == NULL) {
fprintf (stderr, "Error: fdopen() failed: %s\n",
strerror (errno));
}
peer_file = fdopen (peer, "w+");
if (peer_file == NULL) {
fprintf (stderr, "Error: fdopen() failed: %s\n",
strerror (errno));