vxworks對介面操作使用ioctl,引數多為struct ifreq,如獲取介面硬體地址:
struct ifreq ethreq;
strncpy(ethreq.ifr_name, “eth0”, IFNAMSIZ);
retval = ioctl(sockfd[port_index], SIOCGIFLLADDR, ðreq);
但是SIOCADDMULTI要求傳入的引數為struct sockaddr,(#define SIOCADDMULTI VX_IOWR(NETIF, 29, W, struct sockaddr))
如果使用類似的ioctl進行組播加入:
char mymac[6]={0x01,0x0c,0xcd,0x01,0x00,0x01};
struct sockaddr mulcast_addr;
mulcast_addr.sa_family = PF_UNSPEC;
mulcast_addr.sa_len = 6;
for(int i = 0; i < 6; i++)
{
mulcast_addr.sa_data[i] = mymac[i];
}
retval = ioctl (sockfd[port_index], SIOCADDMULTI, (struct sockaddr)&mulcast_addr); //加入多播組
最后retval回傳錯誤,errno為ENXIO,即“/* No such device or address */”。懷疑此處是因為傳入的引數不包含類似于上面ifr_name的介面資訊。是SIOCADDMULTI不能這么使用嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/23811.html
標籤:VxWorks開發
