У меня возникла ошибка из следующего сценария с вызовом сокета IGMP:
fd = socket(PF_INET, SOCK_RAW, IPPROTO_IGMP) ;
setsockopt( fd, IPPROTO_IP, IP_HDRINCL, nval, sizeof(nval) );
/** Fill in the IP header and Ethernet header**/
/*** Fill, create the IGMP packet structures***/
if(sendto( fd, &buf, sizeof(buf), 0,(struct sockaddr *) &addr, sizeof(addr)) < 0) {
printf("Socket Sendto error %d : %s\n", errno, strerror(errno));
return 0;
}
при вызове sendto не удается сказать сообщение слишком длинное. Я использую 8192 в качестве размера буфера. Поэтому я попытался исправить эту ошибку с помощью следующего вызова:
if(setsockopt(dlpifd, IPPROTO_IP, SO_SNDBUF, &val, sizeof(int)) < 0) {
printf("Can't set socket options:%d:%s\n", errno, strerror(errno));
return 0;`
}
вызов setsockopt () завершился успешно, но та же ошибка для sendto ();
Итак, я проверил размер SO_SNDBUF с помощью вызова getsockopt (), и он показывает 1 байт ?!
Что я делаю не так.
Нужно ли перекомпилировать ядро Linux для поддержки IGMP? или мне чего-то не хватает?