현재 Windows에서 usrsctp 라이브러리를 사용하는 네트워크 응용 프로그램을 만들고 있는데 콜백 함수가 아니어야 할 때 매개 변수가 null로 나타나는 이상한 문제가 있습니다. 이것이 특정 usrsctp 문제인지 아니면 내가 잘못하고있는 것인지 확실하지 않아서 여기에서 먼저 확인하고 싶습니다.C++ usrsctp 콜백 매개 변수 null
당신은 내가 그것을 볼 수있는 라이브러리를 통해 추적
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;
}
아래의 코드에서와 같이 데이터가 수신 될 때 호출 할 매개 변수 중 하나로서 기능을 전달할 새로운 SCTP 소켓을 만들 때 통화가 다시 호출되기 전에 모든 매개 변수 내가 그것으로 단계로
이는 즉시이 null이 될 올바른
콜백 함수는 공식 예제에서 직접 가져온 것이므로 아무 것도 잘못해서는 안됩니다.
다른 컴파일러 옵션에 따라 지금까지 usrsctp에서 확인할 수 있습니다. 32 == sizeof (addr) - libusrsctp에서 16 == sizeof (addr) - 사용자 코드에서. –