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