【问题标题】:SCTP multi-homing not working as expectedSCTP 多宿主未按预期工作
【发布时间】:2017-04-30 20:34:49
【问题描述】:

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

  1. 第一个 IP 返回的 INIT-ACK 在标头中包含 2 个不同的 IP,但另一个 IP 在 INIT-ACK 标头中返回两倍的相同 IP。
  2. 似乎我不支持 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++;

谢谢!!!

【问题讨论】:

    标签: c sctp


    【解决方案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 implementation。你看到所有路径上的心跳了吗?你在哪个盒子上测试?

    【讨论】:

    • 感谢您的回答,最后我使用了更容易实现的 sctp_bindx
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-09-14
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 2014-04-05
      • 2011-01-15
      • 2015-10-08
      • 1970-01-01
      相关资源
      最近更新 更多