2013-08-01 7 views
5

ich ein Programm mit udp broadcast.Code Segment wie folgt schreiben:UDP Broadcast-sendto fehlgeschlagen: "Netzwerk ist nicht erreichbar" auf Linux 2.6.30

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"); 

Ausgang:

sendto failed: Network is unreachable 

Aber als ich run "add default gateway" -Befehl wie "route add default gw 10.10.10.111", der Fehler verschwindet. Beim Setzen einer neuen ipadresse auf netdev sollte der Befehl wie oben ausgeführt werden, sonst kommt der Fehler. Warum? Vielen Dank.

Antwort

0

Nicht sicher, warum 255.255.255.255 nicht für Sie arbeitet. Allerdings habe ich das selbst nie als Broadcast-IP verwendet. Wenn ich ein Broadcast-Paket sende, leite ich normalerweise die Broadcast-IP von meiner Subnetzmaske ab, dh wenn deine Subnetzmaske 255.255.255.0 (/ 24) lautet und deine IP 192.168.0.5 ist, dann sollte zum Senden einer UDP-Broadcast deine Ziel-IP sein 192.168.0.255.

Verwandte Themen