2017-05-09 130 views
0

我試圖將套接字綁定到我的計算機上的特定網絡接口。我有兩個名爲interf0和interf1的網絡接口。我想要將套接字綁定到特定的接口,如interf0。我的操作系統是vxWorks 6.2。如何將套接字綁定到vxWorks中的特定接口

我想下面的代碼:

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中的特定接口。

其他裁判:
bind socket to network interface

謝謝。

+0

ifAddr在上面的代碼中是點表示法中接口的IP地址。然而,同樣的情況並沒有單獨工作。 (即通過setsockopt評論) – Jay

+0

您是否嘗試過在vxWorks中使用SO_OUTIF?我們用它來設置vxWorks 5.5中的出站接口。 –

回答

0

看來SO_BINDTODEVICE不是POSIX的一部分,它是一個Linux擴展。因此VxWorks不一定以相同的方式實現接口綁定,如果它完成的話。快速查看VxWorks手冊看起來沒有多大意義。

如果你有VxWorks,你可能也有機會獲得WindRiver的支持,假設你已經跟上了支持費用。如果是這樣,請問他們,那就是它的存在。

相關問題