C++ usrsctp callback parameters null

大兔子大兔子 提交于 2019-12-11 02:54:57

问题


I'm currently creating a network application that uses the usrsctp library on windows and I'm having an odd problem with parameters appearing as null when they shouldn't be on a callback function. I'm not sure if this is a specific usrsctp issue or something I'm doing wrong so I wanted to check here first.

When creating a new sctp socket you pass a function as one of the parameters that you want to be called when data is received as shown in the code below

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;
}

Tracing through the library I can see that before the call back is called all the parameters are correct

As soon as I step into it they become null

I've no idea what would cause this, the callback function was taken straight from the official examples so nothing should be wrong there.


回答1:


Ok, worked out the issue, it seems that the parameter before 'union sctp_sockstore addr' was causing the stack to be pushed by 0x1c and moving the rest of the parameters away from where they should be. I've never come across this issue before but changing the parameter to a pointer fixed it.




回答2:


I had the same Issue, in my case the reason was a missing define for INET. Since the size of 'union sctp_sockstore' depends on this define. So you have to ensure, that you use the same defines as you used when compiling the library.



来源:https://stackoverflow.com/questions/27658266/c-usrsctp-callback-parameters-null

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!