返回信息流在写原始套接字的时候,需要接收所有的IP包,但是在初始化socket的时候就出错的
是这么写的
int s=socket(AF_INET,SOCK_RAW,IPPROTO_IP);
结果s<0,创建失败,错误信息是:Protocol not supported
上网查了一下资料,发现IPPROTO_IP=0
书上有这么一句话,原始套接字中的protocol,一般情况下不能设置为0
求解释,谢谢各位
这是一条镜像帖。来源:北邮人论坛 / cpp / #40323同步于 2010/6/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
问一个原始套接字的问题
steven198662
2010/6/8镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
IPPROTO_IP是创建套接字时指定的一个通配协议名。跟IPPROTO_UDP, IPPROTO_TCP是同等的。但它是一个通配符。比如: socket(AF_INET, SOCK_STREAM, IPPROTO_IP ); 跟 socket(AF_INET, SOCK_STREAM, IPPROTO_TCP ); 是等效的,因为在AF_INET域,面向流的套接字的相关协议只有TCP一个。而 socket(AF_INET, SOCK_RAW, IPPROTO_IP )就是错误的,因为原始套接字类型对应的协议有很多种,没有办法让协议栈去自动匹配,必须指定IPPROTO_ICMP, IPPROTO_IGMP或其它。
详细的在这:http://hi.baidu.com/linux_kernel/blog/item/025e9152b319630e0cf3e380.html
网友评论里面