繁体   English   中英

如何在vxWorks中将套接字绑定到特定接口

[英]How to bind socket to a particular interface in vxWorks

我试图将套接字绑定到计算机上的特定网络接口。 我有两个名为interf0和interf1的网络接口。 我想将套接字绑定到特定接口,例如interf0。 我的操作系统是vxWorks 6.2。

我正在尝试以下代码:

    struct sockaddr_in fromAddr;
    struct sockaddr_in sin;
    int fromLen;
    struct ip_mreq ipMreq;
    int sockDesc;
    STATUS temp;

    if ((sockDesc = socket (AF_INET, SOCK_DGRAM, 0)) < 0)
    {
        printf (" cannot open recv socket\n");
        return ERROR;
    }
    bzero ((char *)&sin, sizeof (sin));
    bzero ((char *) &fromAddr, sizeof(fromAddr));
    fromLen = sizeof(fromAddr);

#if 1
    if ((temp = setsockopt(sockDesc, SOL_SOCKET, SO_BINDTODEVICE, "interf0", 7)) < 0)
    {
        perror("Server-setsockopt() error for SO_BINDTODEVICE");
        printf("%s\n", strerror(errno));
        close(sockDesc);
        return ERROR;
    }
#endif

    sin.sin_len = (u_char) sizeof(sin);
    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = INADDR_ANY;
    //sin.sin_addr.s_addr = inet_addr(ifAddr);
    /* UDP port number to match for the received packets */
    sin.sin_port = htons (mcastPort);
    /* bind a port number to the socket */
    if (bind(sockDesc, (struct sockaddr *)&sin, sizeof(sin)) != 0)
    {
        perror("bind");
        if (sockDesc != ERROR)
        {
            close (sockDesc);
        }
        return ERROR;
    }

在这里,它给出一个错误,指出未定义SO_BINDTODEVICE。

还有什么其他方法可以绑定到vxWorks中的特定接口。

其他参考:
将套接字绑定到网络接口

谢谢。

看来SO_BINDTODEVICE不是POSIX的一部分,它是Linux扩展。 因此,VxWorks完全不必以相同的方式实现接口绑定。 快速浏览VxWorks手册看起来是没有希望的。

如果您拥有VxWorks,并且假设您已经掌握了支持费用,那么您也可能会获得WindRiver的支持。 如果是这样,也要问他们,这就是它的作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM