gpt4 book ai didi

c - errno 97 aka EAFNOSUPPORT aka 协议(protocol)不支持的地址族的可能原因

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:32 27 4
gpt4 key购买 nike

我目前正在修改 Dennis Bush 的 UFTP ( http://uftp-multicast.sourceforge.net ) 以满足我的需要。我目前正在尝试做的是更改客户端发送 COMPLETE 消息的地址。我希望我的 UFTP 修改版本的客户端多播 COMPLETE 消息,而不是将其单播回服务器,因为我需要多播组中的每个客户端都能够看到发送的 COMPLETE 消息,而不仅仅是服务器。

UFTP 的作者告诉我,我应该修改 client_transfer.c, line 359, nb_sendto() function call, 5th argument 到一个包含我想要的私有(private)多播地址和端口的结构发送完成。不幸的是,我收到“协议(protocol)不支持的地址族”错误。代码部分原本是这样的:

 if (nb_sendto(listener, outpacket, payloadlen, 0,
(struct sockaddr *)&group_list[listidx].replyaddr,
sizeof(struct sockaddr_in)) == SOCKET_ERROR) {
sockerror(group_list[listidx].group_id, group_list[listidx].file_id,
"Error sending COMPLETE");
} else {
log(group_list[listidx].group_id, group_list[listidx].file_id,
"COMPLETE sent");
}
set_timeout(listidx);

free(buf);
free(encrypted);

我当前的代码如下所示:

if (nb_sendto(listener, outpacket, payloadlen, 0,
////modified line:
(struct in_addr *)&group_list[listidx].multi.s_addr, //struct in_addr multi;
////end of modified line
sizeof(struct sockaddr_in)) == SOCKET_ERROR) {
sockerror(group_list[listidx].group_id, group_list[listidx].file_id,
"Error sending COMPLETE");
} else {
log(group_list[listidx].group_id, group_list[listidx].file_id,
"COMPLETE sent");
}
set_timeout(listidx);

free(buf);
free(encrypted);

对我来说,这个错误非常模糊。这到底是什么意思?这种错误的可能原因是什么?有人能指出我正确的方向吗?

最佳答案

如果你传递一个 in_addrsockaddr 是预期的,那么问题很简单,当系统调用查看它认为是它的地址族时认为是一个 sockaddr 结构,它实际上看到了您的多播地址的一个字节,这可能不是一个有效的地址族。

为了解释更多,sockaddr_in 看起来像这样:

struct sockaddr_in {
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
}

所以 in_addr 前面有一个您没有提供的系列和端口号,而是您地址的第一个字节被视为一个地址系列。

关于c - errno 97 aka EAFNOSUPPORT aka 协议(protocol)不支持的地址族的可能原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13452224/

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