工具/软件:TI-RTOS
您好,
我当前正在使用 NDK_2_24_03_35、并对 socketndk.h 中定义的几个结构有疑问
/* AF_iNet 系列(IPv4)套接字地址数据结构。 *
struct sockaddr_in{
uint8 sin 系列;//地址系列*/
uint16 sin 端口;/*端口*
struct in_addr sin addr;
int8 sin_zero_[8];//固定长度地址值*/
};
/*通用套接字地址存储数据结构。 *
struct sockaddr{
uint8 sa_family;//地址系列*/
char sa_data[14];//套接字数据*/
};
这些结构似乎在堆栈代码内被重叠和互换。
我的编译器填充结构 sockaddr_in、以避免成员 sin_port 位于奇数边界上、从而使16字节的大小与 socaddr 的大小相比较
什么是15字节?
在函数 NDK_recvf()中 ,如果 sizeof socaddr (15个字节)作为参数 int *PLEN 传入,则 以下检查失败:-
/*验证大小和指针*/
if (pname &&(!PLEN ||(pname->sa_family =AF_iNet &&* PLEN < sizeof (SA_IN)) 、其中 SA_IN 是 struct sockaddr_in、而* PLEN 是 struct sockaddr 的长度。
提前感谢
Brian