sctp_bindx(Solaris sctp库)始终返回“无效参数”

时间:2013-05-10 06:54:16

标签: sockets network-programming solaris sctp

我正在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);  

我检查了所有参数,发现它们是正确的。所以我无法弄清楚这个问题的原因。谁能帮助我?提前谢谢!

1 个答案:

答案 0 :(得分:0)

您需要先调用bind。

来自sctp_bindx

上的oracle文档
An application can use sctp_bindx(SCTP_BINDX_ADD_ADDR) to associate 
additional addresses with an endpoint **after calling the bind() function**.