В настоящее время я создаю сетевое приложение, использующее библиотеку usrsctp для окон, и у меня возникает нечетная проблема с параметрами, которые отображаются как null, когда они не должны быть в функции обратного вызова. Я не уверен, что это конкретная проблема usrsctp или что-то, что я делаю неправильно, поэтому я хотел сначала проверить здесь.Параметры обратного вызова C++ usrsctp null
При создании нового 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;
}
Трассировка через библиотеку, я могу видеть, что до обратного вызова вызывается все параметры являются правильными
Как только я ступаю на него они утрачивают
Я не знаю, что могло бы вызвать это, функция обратного вызова была взята прямо из официальных примеров, поэтому в этом нет ничего плохого.
Я подтверждаю, что до сих пор в usrsctp, в зависимости от разных параметров компилятора, возникает проблема: 32 == sizeof (addr) - in libusrsctp, 16 == sizeof (addr) - в коде пользователя. –