我目前正在创建一个在 Windows 上使用 usrsctp 库的网络应用程序,当参数不应该在回调函数上时,我遇到了一个奇怪的问题,即参数显示为 null。我不确定这是否是特定的 usrsctp 问题还是我做错了什么,所以我想先在这里检查一下。
创建新的 sctp 套接字时,您传递一个函数作为您希望在接收到数据时调用的参数之一,如下面的代码所示
static int receive_cb(struct socket *sock, union sctp_sockstore addr, void *data,
size_t datalen, struct sctp_rcvinfo rcv, int flags, void *ulp_info)
{
if (data == NULL) {
printf("receive_cb - Data NULL, closing socket...\n");
done = 1;
usrsctp_close(sock);
}
else {
_write(_fileno(stdout), data, datalen);
free(data);
}
return (1);
}
...
//Create SCTP socket
if ((sctpsock = usrsctp_socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP, receive_cb, NULL, 0, NULL)) == NULL) {
perror("usrsctp_socket");
return -1;
}
跟踪库我可以看到在调用回调之前所有参数都是正确的
一旦我踏入它,它们就会变为空
我不知道是什么原因造成的,回调函数直接取自官方示例,所以那里应该没有错。