2017-05-09 35 views
0

コンピュータの特定のネットワークインタフェースにソケットをバインドしようとしています。私は、interf0とinterf1という名前の2つのネットワークインターフェイスを持っています。私はバインドソケットを特定のインタフェースにinterf0と言いたい。私のOSは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のサポートにアクセスする可能性があります。もしそうなら、彼らにも尋ねなさい、それがそこにあるのです。

関連する問題