サーバー側として SCTP にマルチホーミングを実装する際に問題に直面しています。サーバーには、リッスンしている 2 つの IP があります。私はほとんどそこにいますが、2つの問題があります:
- 最初の IP はヘッダー内に 2 つの異なる IP を含む INIT-ACK を返しますが、もう一方の IP は INIT-ACK ヘッダーで同じ IP を 2 回返します。
- マルチホーミングで 100% をサポートしていないようです。たとえば、リンクの 1 つがダウンしている場合、フェイルオーバーは見られません。
したがって、オプション SCTP_SOCKOPT_BINDX_ADD を指定した setsockopt を除いて、他に何か (おそらく SCTP_PRIMARY_ADDR?) が必要なのか、実装の何が問題なのかわかりません。
以下はコードです。このコードを 2 回入力します。1 回目はソケットと最初のアドレスをバインドして保存し、2 回目は (2 番目の 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++;
ありがとう!!!