c - Socket error:90:Message Too Long -


i have error following scenario igmp socket call;

fd = socket(pf_inet,  sock_raw, ipproto_igmp) ; setsockopt( fd, ipproto_ip, ip_hdrincl, nval, sizeof(nval) ); /** fill in ip header , ethernet header**/ /*** fill, create 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; } 

the sendto call fails saying message long. using 8192 buffer size. tried using following call fix error;

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( ) call succeeds same error sendto();

so checked so_sndbuf size getsockopt( ) call , shows 1 byte ?!

what wrong doing.

does linux kernel need recompile igmp support ? or missing something?

ethernet (the link layer working against) frame 1500 bytes long. give send() exact size of message, not buffer size.

so_sndbuf in-kernel per-socket buffer, tells how buffer tcp, limits size of datagram udp, , not make sense raw sockets.


Comments

Popular posts from this blog

java - SNMP4J General Variable Binding Error -

windows - Python Service Installation - "Could not find PythonClass entry" -

Determine if a XmlNode is empty or null in C#? -