2012-11-04 4 views
1

SCTP에서 멀티 호밍을 서버 측으로 구현할 때 문제가 있습니다. 서버는 청취중인 두 개의 IP를 가지고 있습니다. 은 거의 다 해요,하지만 거기에 2 문제가 있습니다 : 그것은해야하지만, 다른 IP가 INIT-ACK에 두 번 같은 IP를 반환으로SCTP 멀티 호밍이 예상대로 작동하지 않습니다.

  1. 먼저 IP 헤더 내부에 2 개 개의 다른 IP를 가진 INIT-ACK를 반환 머리글.
  2. 멀티 홈 (multi-homing)에서 100 %를 지원하지 않는 것처럼 보입니다. 예를 들어, 링크 중 하나가 다운 된 경우 장애 조치가 표시되지 않습니다.

그래서 SCTP_SOCKOPT_BINDX_ADD 옵션이있는 setsockopt를 제외한 경우 다른 것을 (어쩌면 SCTP_PRIMARY_ADDR?) 필요합니까, 아니면 구현에 문제가 있는지 알고 싶습니다.

다음 코드는 두 번이 코드를 입력하고 소켓과 첫 번째 주소를 바인딩 한 다음 다시 두 번째 IP 주소로 바인딩 한 다음 setsockopt를 실행하여 두 주소와 소켓.

bind(socket, &sock_addr.addr.sock_addr, sock_addr_len); 
    if(SHARED.num_used_entries_in_sockaddr_array == 0) 
    { 
     SHARED.saved_socket = socket; 
     SHARED.sockaddr_array[1] = sock_addr.addr.sock_addr; 
    } 
    else 
    { 
     SHARED.sockaddr_array[0] = sock_addr.addr.sock_addr; 
    } 

    if(SHARED.num_used_entries_in_sockaddr_array > 0) 
    { 

    sock_rc = setsockopt(SHARED.saved_socket, 
            IPPROTO_SCTP, 
            SCTP_SOCKOPT_BINDX_ADD, 
            (char*)SHARED.sockaddr_array, 
            sizeof(SCKOS_SOCK_ADDR)); 

    sock_rc = setsockopt(socket, 
            IPPROTO_SCTP, 
            SCTP_SOCKOPT_BINDX_ADD, 
            (char*)SHARED.sockaddr_array, 
            sizeof(SCKOS_SOCK_ADDR)); 

    } 
    SHARED.num_used_entries_in_sockaddr_array++; 

감사합니다 !!!

답변

1

SCTP_SOCKOPT_BINDX_ADD는 멀티 호밍에 적합합니다. 코드에 사용되지 않은 행이 있습니다.

if(SHARED.num_used_entries_in_sockaddr_array == 0) 
    { 
    bind(socket, &sock_addr.addr.sock_addr, sock_addr_len); 
    } 
    else 
    { 
    sock_rc = setsockopt(socket, 
           IPPROTO_SCTP, 
           SCTP_SOCKOPT_BINDX_ADD, 
           (char*)sock_addr.addr.sock_addr, 
           sizeof(SCKOS_SOCK_ADDR)); 
    }enter code here 

linux sctp 구현을 참조하십시오. 모든 경로에서 하트 비트를 보았습니까? 어느 상자에서 테스트합니까? 답에 대한

+0

감사를 구현하기가 훨씬 용이 sctp_bindx을 사용 – kurdt

0

덕분에, 결국 나는 구현하기가 훨씬 용이 나는 sctp_bindx 사용 결국, 답변

관련 문제