改变设备ip后UDP组播 c面临的问题



我们在使用Linux 4.1内核的项目中需要UDP多播使用静态IP地址

使用sendto函数发送数据的基本UDP多播在设备静态ip 10.13.204.100下工作正常,当我将设备的ip更改为10.13.204.101或同一系列中的任何其他ip时,问题出现了,UDP多播显示错误

sendto: network unreachable

正在初始化UDP,如下所示

int udp_init()
{
char multicastTTL = 10;
// Create UDP socket:
memset(&socket_desc, 0, sizeof(socket_desc));
socket_desc = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (socket_desc < 0)
{
perror("socket");
return 1;
}
udp_socket_fd = socket_desc;
printf("udp_socket_fd=>%dnsocket_desc==>%dn", udp_socket_fd, socket_desc);
/* Set the TTL (time to live/hop count) for the send */
// if (setsockopt(socket_desc, IPPROTO_IP, IP_MULTICAST_TTL, &multicastTTL, sizeof(multicastTTL)) < 0)
if (setsockopt(socket_desc, SOL_SOCKET, SO_REUSEADDR, &multicastTTL, sizeof(multicastTTL)) < 0)
{
perror("setsockopt");
exit(1);
}
memset(&server_addr, 0, sizeof(server_addr)); /* Zero out structure */
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(EXAMPLE_GROUP); // INADDR_ANY;
server_addr.sin_port = htons(EXAMPLE_PORT);             // htons(udp_port);
// bind to receive address
//
if (bind(socket_desc, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
{
perror("bind");
printf("line %s-->%s:%dn", __FILE__, __FUNCTION__, __LINE__);
return 1;
}
}

一旦ip改变,使用

关闭UDP套接字
close(socket_desc) 

我再次使用udp_init函数初始化UDP,然后使用sendto函数发送数据,但我得到sendto:network unreachable

thanks in advance

sendto:网络不可达;意味着你没有到新地址的路由,添加它或更改。100路由的掩码

最新更新