linux组播编程
linux组播编程步骤:
- 建立一个socket;
int igmpi_socket;
igmpi_socket = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP);
domain(域) → AF_INET:IP网络协议(指的是IPv4);
type(套接字类型) → SOCK_RAW:原始套接字;
protocol(协议) → IPPROTO_IGMP:IGMP协议(一般情况下,让protocol等于0就可以,系统会给它默认的协议。但是要是使用raw socket协议,protocol就不能简单设为0,要与type参数匹配)。
- 设置组播的参数,例如超时时间TTL,本地回环许可LOOP等;
组播程序设计使用setsockopt()函数和getsockopt()函数来实现,组播的选项是IP层的。
int setsockopt(SOCKET s, int level, int optname, const char FAR * optval, int optlen);
int getsockopt(SOCKET s, int level, int optname, char FAR * optval, int FAR * optlen);
level必须为IPPROTO_IP,optname就是在组播起到最主要作用的一个字段,optname可取值如下:
可取值
a) IP_MULTICAST_TTL;
选项1~255之间的任何值。默认情况下,组播报文的TTL被设置成了1,也就是说到这个报文在网络传送的时候,它只能在自己所在的网络传送,当要向外发送的时候,路由器把TTL减1以后变成了0,这个报文就已经被Discard了。例如: