TI中文支持网
TI专业的中文技术问题搜集分享网站

NDK2.24的一个结构对齐问题

C6748   CCS5.5   NDK2.24

今天将ftplib移植到NDK下,发现个问题

函数FtpOpenPort中有定义:

    union {  

        struct sockaddr sa;  

        struct sockaddr_in in;    

    } sin;

然后对sin.sa.sa_data数组操作,填充IP地址和端口,后面connect就失败了

调试发现sin.sa.sa_data数组数据正确,但是sin.in.sin_port和sin.in.sin_addr.s_addr是错误的

分析原因,在于NDK对sockaddr 和sockaddr_in的定义上

struct sockaddr {    

    unsigned char sa_family;         /* address family */    

    char          sa_data[14];       /* socket data */

 };

struct sockaddr_in {    

    unsigned char  sin_family;       /* address family */    

    unsigned short sin_port;         /* port */    

    struct         in_addr sin_addr;    

    char           sin_zero[8];      /* fixed length address value */

};

可以看到sockaddr 可以字节对齐。

然而sockaddr_in不行,它的sin_port是16位的,这样sin_family和sin_port之间就会多一个字节

如果操作sockaddr,就造成sockaddr_in出错。

所以我改为操作sockaddr_in,结果FTP一切正常了。

 

Denny%20Yang99373:

http://e2e.ti.com/support/development_tools/compiler/f/343/t/89148

http://e2e.ti.com/support/dsp/tms320c6000_high_performance_dsps/f/112/p/11396/44313

赞(0)
未经允许不得转载:TI中文支持网 » NDK2.24的一个结构对齐问题
分享到: 更多 (0)