visual c++ - C++ usrsctp parámetros de devolución de llamada nulo
visual-c++ callback (1)
Ok, resolvió el problema, parece que el parámetro antes de ''union sctp_sockstore addr'' estaba causando que la pila fuera empujada por 0x1c y moviendo el resto de los parámetros lejos de donde deberían estar. Nunca me he encontrado con este problema, pero cambiar el parámetro a un puntero lo solucionó.
Actualmente estoy creando una aplicación de red que usa la biblioteca usrsctp en Windows y tengo un problema extraño con los parámetros que aparecen como nulos cuando no deberían estar en una función de devolución de llamada. No estoy seguro de si este es un problema específico de usrsctp o algo que estoy haciendo mal, así que quise verificar aquí primero.
Al crear un nuevo socket de sctp, pasa una función como uno de los parámetros a los que desea llamar cuando se reciben los datos, como se muestra en el siguiente código
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;
}
Rastreando a través de la biblioteca puedo ver que antes de que se llame a la llamada, todos los parámetros son correctos
Tan pronto como entro en él se vuelven nulos
No tengo idea de qué es lo que causaría esto, la función de devolución de llamada se tomó directamente de los ejemplos oficiales, por lo que no debería haber ningún error allí.