网络不可达 linux,Ç的sendto函数集“网络不可达”在linux2.6.29

我有一个UDP服务器和客户端,客户端广播活动消息和服务器捕获它们(代码如下)。当我在ubuntu14.04,16.04,fedora6等几种不同的桌面Linux上运行这些时,它们工作正常。但是当我尝试在mpc8308板上从ltib制作的嵌入式linux上运行它们时,服务器工作(接收来自其他机器的消息),但客户端将errno设置为“network is unreachable”,因为它调用sendto。

我试过wireshark并且没有客户端接口上的数据包,我在板上测试了带有tcpdump的系统,并且没有生成数据包。

下面是代码客户端:

int clientSocket, portNum, nBytes;

char buffer[1024];

struct sockaddr_in serverAddr;

socklen_t addr_size;

/*Create UDP socket*/

clientSocket = socket(AF_INET, SOCK_DGRAM, 0);

int broadcastEnable=1;

int retsockopts=setsockopt(clientSocket, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable));

/*Configure settings in address struct*/

serverAddr.sin_family = AF_INET;

serverAddr.sin_port = htons(12021);

serverAddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);

memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero);

/*Initialize size variable to be used later on*/

addr_size = sizeof serverAddr;

while(1){

sprintf(buffer,"I AM ALIVE");

nBytes = strlen(buffer) + 1;

int err;

err = sendto(clientSocket,buffer,nBytes,0,(struct sockaddr *)&serverAddr,addr_size);

if(err==-1) //error occured

{

printf("error sending alive message: %s\n",strerror(errno));

}

sleep(5);

}

编辑:

我检查发送广播消息到子网广播地址和它的工作。但全球广播地址是无法访问的......我认为问题是,OS无法确定它应该使用哪个网络接口来发送这个数据包,但我不知道如何解决它。 EDIT2:

我加了一些选项,我的代码,以便在插槽绑定到特定接口和我上面提到的问题是可以解决的,这工作:

int rc = setsockopts(clientSocket, SOL_SOCKET, SO_BINDTODEVICE, "eth0", 4);

2016-07-26

mhk

+0

听起来更像是一个管理/网络问题,而不是编程相关的问题。 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值