gpt4 book ai didi

c - 如何将套接字绑定(bind)到vxWorks中的特定接口(interface)

转载 作者:行者123 更新时间:2023-11-30 16:46:10 24 4
gpt4 key购买 nike

我正在尝试将套接字绑定(bind)到我的计算机上的特定网络接口(interface)。我有两个名为 interf0 和 interf1 的网络接口(interface)。我想将套接字绑定(bind)到特定接口(interface)(例如 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 未定义。

有没有其他方法可以绑定(bind)到 vxWorks 中的特定接口(interface)。

其他引用:
bind socket to network interface

谢谢。

最佳答案

SO_BINDTODEVICE 似乎不是 POSIX 的一部分,它是 Linux 扩展。因此,VxWorks 不一定会以相同的方式实现接口(interface)绑定(bind)(如果确实如此)。快速浏览一下 VxWorks 手册,看起来没什么希望。

如果您有 VxWorks,您可能还可以获得 WindRiver 的支持(假设您已支付支持费用)。如果是这样,也问问他们,这就是它的用途。

关于c - 如何将套接字绑定(bind)到vxWorks中的特定接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43862141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com