我正在 Solaris OS 中编写 SCTP 测试程序,并使用 Solaris 本机 SCTP 堆栈。该程序喜欢这样:
if ((fd = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP)) < 0) {
perror("socket");
}
addr.sin_family = AF_INET;
addr.sin_port = htons(9004);
addr.sin_addr.s_addr = inet_addr("192.168.23.117");
if (sctp_bindx(fd, (struct sockaddr*)&addr, sizeof(struct sockaddr_in), SCTP_BINDX_ADD_ADDR) < 0) {
perror("bind");
}
运行程序时,总是返回错误:“无效参数”。我用gdb查了一下,发现addr结构是对的。
因为Solaris不是开源的,只能用gdb查看汇编代码,发现sctp_bindx调用了setsockopt函数,setsockopt函数返回错误。调用 setsockopt 喜欢这样:
setsockopt(fd, SOL_SCTP, SCTP_ADD_ADDR, addrs, addrs_size);
我检查了所有参数,发现它们是正确的。所以我无法弄清楚这个问题的原因。有人可以帮我吗?提前致谢!