小编Sat*_*hya的帖子

套接字错误:90:消息太长

我在以下场景中遇到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;
}
Run Code Online (Sandbox Code Playgroud)

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;`
}
Run Code Online (Sandbox Code Playgroud)

setsockopt()调用成功,但sendto()的错误相同;

所以我用getsockopt()调用检查SO_SNDBUF大小,它显示1个字节?

我在做什么是错的.

Linux内核是否需要重新编译才能获得IGMP支持?或者我错过了什么?

c sockets network-programming igmp linux-kernel

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

c ×1

igmp ×1

linux-kernel ×1

network-programming ×1

sockets ×1