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);



LinkBack URL
About LinkBacks


