Я использовал fork для создания группы дочерних элементов в каждом дочернем элементе, создав UDP-порт и отправив его обратно родительскому по TCP, но проблема в том, что когда число детей увеличилось до 9, Функция getsockname() возвращает порт num 0 для каждого дочернего элемента.getsockname возвращает недействительный адрес
int udp_sockfd;
struct sockaddr_in their_addr, my_addr;
socklen_t slen;//used in getsockname()
if((udp_sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
perror("socket");
exit(1);
}
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(0);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero), sizeof(my_addr.sin_zero));
if(bind(udp_sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
{
perror("bind");
exit(1);
}
getsockname(udp_sockfd,(struct sockaddr*)&my_addr,&slen);
printf("client %d: my port number: %d\n",i,my_addr.sin_port);
когда есть 8 детей, результат правильно