2017-05-09 15 views
0

내 컴퓨터의 특정 네트워크 인터페이스에 소켓을 바인딩하려고합니다. interf0과 interf1이라는 두 개의 네트워크 인터페이스가 있습니다. 특정 인터페이스에 바인드 소켓이 필요하다. 내 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의 지원을받을 수 있습니다. 그렇다면 그들에게도 물어보십시오.