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
Post a Comment