Я пытаюсь использовать параметры сокета SCTP_PRIMARY_ADDR, чтобы сделать один из локальных адресов ассоциации SCTP в качестве основного и SCTP_SET_PEER_PRIMARY_ADDR, чтобы запросить сервер SCTP сделать один из его адресов в качестве основного для будущей связи SCTP.
struct sctp_setprim setPrimary;
memset((void *)&setPrimary, 0, sizeof(struct sctp_setprim));
setPrimary.ssp_assoc_id = 0;
struct sockaddr_in *in_addr;
in_addr = (struct sockaddr_in *)&setPrimary.ssp_addr;
in_addr->sin_port = htons(localPort);
in_addr->sin_family = AF_INET;
in_addr->sin_addr.s_addr = localIps[0].Int32NetworkOrder();
int rc = setsockopt(m_s, IPPROTO_SCTP, SCTP_PRIMARY_ADDR, &setPrimary, sizeof(struct sctp_setprim));**
Для приведенного выше фрагмента кода я вижу ошибку сокета "Неверный аргумент". Я не знаю причину этой ошибки. Я подтвердил IP-адрес.
Также для SCTP_SET_PEER_PRIMARY_ADDR, ниже приведен фрагмент кода.
struct sctp_setpeerprim setPeerPrimary;
memset((void *)&setPeerPrimary, 0, sizeof(struct sctp_setpeerprim));
setPeerPrimary.sspp_assoc_id = 0;
struct sockaddr_in *in_addr;
in_addr = (struct sockaddr_in *)&setPeerPrimary.sspp_addr;
in_addr->sin_port = htons(remotePort);
in_addr->sin_family = AF_INET;
in_addr->sin_addr.s_addr = remoteIps[0].Int32NetworkOrder();
int rc = setsockopt(m_s, IPPROTO_SCTP, SCTP_SET_PEER_PRIMARY_ADDR, &setPeerPrimary, sizeof(struct sctp_setpeerprim));
Для этого блока кода я вижу ошибку "Операция не разрешена". И опять же, я ничего не понимаю об этой причине ошибки.
Я делаю что-то действительно неправильно или моя библиотека sctp не поддерживает указанные выше параметры сокетов?
Пожалуйста, помогите.