2
我目前正在創建一個在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套接字回調被調用之前所有的參數都正確
當我踏進去,他們成爲空
我不知道什麼會導致這種情況,回調函數是直接從官方的例子,所以沒有什麼應該是錯誤的。
我確認,直到現在在usrsctp中,根據不同的編譯器選項,可能會出現問題: 32 == sizeof(addr) - 在libusrsctp中,16 == sizeof(addr) - 在用戶代碼中。 –