局域网发现协议
route add -net 224.0.0.0 netmask 224.0.0.0 dev br-lanif(-1 == (sIotcMulticast.iSocketFd = socket(AF_INET, SOCK_DGRAM, 0)))
{
ERR_vPrintf(T_TRUE, "socket create error %s\n", strerror(errno));
return E_MULTI_ERROR_CREATESOCK;
}
int on = 1; /*SO_REUSEADDR port can used twice by program */
if((setsockopt(sIotcMulticast.iSocketFd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)))<0)
{
ERR_vPrintf(T_TRUE,"setsockopt failed, %s\n", strerror(errno));
close(sIotcMulticast.iSocketFd);
return E_MULTI_ERROR_SETSOCK;
}
sIotcMulticast.server_addr.sin_family = AF_INET;
sIotcMulticast.server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
sIotcMulticast.server_addr.sin_port = htons(iPort);
if(-1 == bind(sIotcMulticast.iSocketFd,
(struct sockaddr*)&sIotcMulticast.server_addr, sizeof(sIotcMulticast.server_addr)))
{
ERR_vPrintf(T_TRUE,"bind socket failed, %s\n", strerror(errno));
close(sIotcMulticast.iSocketFd);
return E_MULTI_ERROR_BIND;
}
sIotcMulticast.multi_addr.imr_multiaddr.s_addr = inet_addr(paMulAddress);
sIotcMulticast.multi_addr.imr_interface.s_addr = htonl(INADDR_ANY);
if(setsockopt(sIotcMulticast.iSocketFd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(char *)&sIotcMulticast.multi_addr, sizeof(sIotcMulticast.multi_addr)) < 0)
{
ERR_vPrintf(T_TRUE,"setsockopt failed, %s\n", strerror(errno));
close(sIotcMulticast.iSocketFd);
return E_MULTI_ERROR_SETSOCK;
}最后更新于