SCTP多宿主无法按预期工作

时间:2012-11-04 14:09:38

标签: c sctp

我在SCTP中实现多宿主作为服务器端时遇到了问题。服务器有2个正在侦听的IP。 我快到了,但有两个问题:

  1. 第一个IP在报头内返回INIT-ACK,其中包含2个不同的IP,但是其他IP在INIT-ACK报头中返回相同IP的两倍。
  2. 好像我不支持100%多宿主,例如,如果其中一个链接断开,我就看不到故障转移。
  3. 所以我不知道除了带有选项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++;
    

    感谢!!!

2 个答案:

答案 0 :(得分: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实现。你有没有在所有路径上看到心跳?你测试哪个盒子?

答案 1 :(得分:0)

感谢答案,最后我使用了更容易实现的sctp_bindx