STATUS netDevInit(void)
{
char opt = 0;
int optval = 0;
int tempAddrLen = 0;
struct in_addr ifAddr;
//--- 主网卡(fei0)初始化
if (ipAttach(0, "fei") == ERROR)...
if (ifAddrSet("fei0", LOCAL_IP_ADDR) == ERROR)...
if (ifMaskSet("fei0", LOCAL_MASK_CODE) == ERROR)...
//--- 从网卡(fei1)初始化
if (ipAttach(1, "fei") == ERROR)...
if (ifAddrSet("fei1", LOCAL_IP_ADDR_TEMP) == ERROR)...
if (ifMaskSet("fei1", LOCAL_MASK_CODE_TEMP) == ERROR)...
taskDelay(sysClkRateGet());
//--- 双网切换的主网卡(fei0)和从网卡(fei1)设置
if (InitNetSwitch(0, 1, 0) != 0)...
//---
if ((sockFd = socket (AF_INET, SOCK_DGRAM, 0)) == ERROR)...
taskDelay(10);
if ((bind(sockFd, (struct sockaddr *)&localSockAddr, tempAddrLen)) == ERROR)...
taskDelay(10);
ifAddr.s_addr = inet_addr(LOCAL_IP_ADDR);
if(setsockopt(sockFd, IPPROTO_IP, IP_MULTICAST_IF, (char *)&ifAddr, sizeof(struct in_addr)) == ERROR)...
taskDelay(10);
ipmr.imr_multiaddr.s_addr = inet_addr(REMOTE_IP_ADDR);
ipmr.imr_interface.s_addr = inet_addr(LOCAL_IP_ADDR);
if(setsockopt(sockFd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&ipmr, sizeof(struct ip_mreq)) == ERROR)...
taskDelay(10);
if (AddMulticast(0, sockFd, &ipmr) != 0)... // errno=0x31
taskDelay(10);
return OK;
}
测试采用某型号PC104板卡和对应的双冗余网卡库文件,厂家的demo运行没有问题,自己的程序总报错,后找到原因是因为taskDelay()的使用导致,未能够深入究其原因~