我在SCTP中实现多宿主作为服务器端时遇到了问题。服务器有2个正在侦听的IP。 我快到了,但有两个问题:
所以我不知道除了带有选项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++;
感谢!!!
答案 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