I'm trying to retrieve the random port number the kernel assigned to my socket. Unfortunately getsockname() keeps throwing a bad address error and I have no idea why.... Hopefully someone can provide some assistance.
Below is the code segment:
Code:
struct sockaddr_in target, me;
int rc, sd;
/* set target struct info*/
target.sin_family = target_address->h_addrtype;
memcpy((char *) &target.sin_addr.s_addr,
target_address->h_addr_list[0], target_address->h_length);
target.sin_port = target_port;
/* create socket */
if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) == -1){
perror("socket");
exit(1);
}
/* bind socket to random port */
me.sin_family = AF_INET;
me.sin_addr.s_addr = INADDR_ANY;
me.sin_port = 0;
if ((bind(sd, (struct sockaddr *) &me, sizeof(me))) == -1){
perror("bind");
exit(1);
}
/* connect UDP socket */
if ((rc = connect(sd, (struct sockaddr *) &target, sizeof(target)))){
perror("connect");
exit(1);
}
/* get random port */
if (getsockname(sd, (struct sockaddr *) &me, (int *)sizeof(me)) == -1){
perror("getsockname");
//exit(1);
}
printf("Listening on port %d\n", me.sin_port);