2013-08-01 8 views
5

scrivo un programma utilizzando segmento broadcast.Code UDP come segue:UDP Broadcast sendto fallito: "rete non è raggiungibile" su 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"); 

uscita:

sendto failed: Network is unreachable 

Ma quando ho esegui il comando "aggiungi gateway predefinito" come "route add default gw 10.10.10.111", l'errore scompare. Quando si imposta un nuovo indirizzo ip su netdev, il comando come sopra dovrebbe essere eseguito, altrimenti l'errore arriva. Perché? Grazie.

risposta

0

Non sai perché 255.255.255.255 non funzioni per te. Tuttavia, non l'ho mai usato come IP broadcast. Quando invio un pacchetto broadcast di solito derivano l'IP broadcast dalla mia subnet mask, cioè se la tua subnet mask è 255.255.255.0 (/ 24) e dici che il tuo IP è 192.168.0.5, quindi per inviare una trasmissione UDP il tuo IP di destinazione dovrebbe essere 192.168.0.255.