UDP广播发送失败:“网络不可达"在Linux 2.6.30上 [英] UDP Broadcast sendto failed:"network is unreachable" on linux 2.6.30

查看:68
本文介绍了UDP广播发送失败:“网络不可达"在Linux 2.6.30上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用udp广播编写程序.代码段如下:

I write a program using udp broadcast.Code segment as follows:

struct sockaddr_in broadcast_addr;
socklen_t sock_len=sizeof(broadcast_addr);

bzero(&broadcast_addr,sock_len);
broadcast_addr.sin_family=AF_INET;
broadcast_addr.sin_port=12345;
broadcast_addr.sin_addr.s_addr=inet_addr("255.255.255.255");

int fd=socket(AF_INET,SOCK_DGRAM,0);
int broadcast_enable=1;
setsockopt(fd,SOL_SOCKET,SO_BROADCAST,&broadcast_enable,sizeof(broadcast_enable));

uint8_t send_buf[100];
int ret=sendto(fd,send_buf,sizeof(send_buf),0,
       (struct sockaddr*)&broadcast_addr,sock_len);

 if(ret==-1)
    perror("sendto failed");

输出:

sendto failed: Network is unreachable

但是当我运行诸如"route add default gw 1​​0.10.10.111"之类的"add default gateway"命令时,错误消失了.将新的ipaddress设置为netdev时,应运行上述命令,否则将出现错误.为什么?谢谢.

But when I run "add default gateway" command like " route add default gw 10.10.10.111 ",the error disappears.When setting a new ipaddress to netdev,command as above should be ran,otherwise the error comes. Why? Thanks.

推荐答案

不确定255.255.255.255对您不起作用的原因.但是,我本人从未将其用作广播IP.当我发送广播数据包时,通常会从我的子网掩码中得出广播IP,即,如果您的子网掩码是255.255.255.0(/24),并且说您的IP是192.168.0.5,那么发送UDP广播,您的目标IP应该是192.168.0.255.

Not sure why 255.255.255.255 isn't working for you. However, I've never used that as a broadcast IP myself. When I send a broadcast packet I usually derive the broadcast IP from my subnet mask, i.e. if your subnet mask is 255.255.255.0 (/24) and say your IP is 192.168.0.5, then to send a UDP broadcast your destination IP should be 192.168.0.255.

这篇关于UDP广播发送失败:“网络不可达"在Linux 2.6.30上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆