Linux多网卡拉同一组播导致数据异常

最近在做项目的时候遇到了这么一个问题,就是在使用 多网卡的 Linux主机拉组播数据的时候,如果两块网卡在一个局域网中,并且拉同一个组播流,那么就会出现问题,问题的现象是 每个网卡都可以收到组播流,但是收到的组播流数据是双倍的。

最终问了曾经遇到过这个问题的同事后,发现只是在创建 socket的地方绑定一个网卡就可以了,需要使用 SO_BINDTODEVICE来绑定网卡,需要的参数是网卡名称。


代码:

    struct ifreq Ifreq;
	strcpy(Ifreq.ifr_name, "eth0"); //这里指定使用那块网卡拉流 参数为网卡名称
	if(setsockopt(SocketFd, SOL_SOCKET, SO_BINDTODEVICE, (char *)&Ifreq, sizeof(Ifreq)) < 0)
	{
		perror("setsockopt():SO_BINDTODEVICE");
		return -1;
	}


你可能感兴趣的:(C++,Linux)