gpt4 book ai didi

port - getockname 返回无效地址

转载 作者:行者123 更新时间:2023-12-04 04:36:52 25 4
gpt4 key购买 nike

我用fork创建了一堆 child ,在每个 child 中,创建一个UDP端口并通过TCP将其发送回 parent ,但问题是当 child 数量增加到9时,getsockname()函数返回端口号每个 child 0。

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个 child 时,结果是正确的

最佳答案

您需要初始化 slen作为getsockname() 的参数,你应该检查它的返回值——这样你就可以在失败时获得更多信息。

slen = sizeof my_addr;
if (getsockname(udp_sockfd,(struct sockaddr*)&my_addr,&slen) != 0) {
perror("getsockname");
}

关于port - getockname 返回无效地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19621030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com