转载请注明出处:http://blog.csdn.net/andywant2fly/article/details/44154429#
为什么是Native Socket
众所周知,Java层已经提供一个简单易用的Socket,那为什么还要舍近求远,自己重新封装一个Native层的Socket呢?相较于Java层的Socket,Native层的Socket可以选择的配置项更多,并且能够比较准确的获取当前的拥塞状态等信息,我们可以针对不同的网络环境和应用场景配置合理的参数以达到最优的体验。当然这是一个选择的问题,如果觉得Java层的Socket足以满足需要,也不一定非要使用Native Socket不可。
Native Socket可配置的参数
那么Native Socket有哪些配置项呢?由于移动网络高RTT和高丢包的特性,移动网络的通信多基于TCP协议,所以我们这里主要讨论TCP协议。在NDK相关平台的include文件夹下的socket.h和tcp.h中列出可以配置的项(这里以Android4.0为例):
socket.h
#define SO_DEBUG 1
#define SO_REUSEADDR 2
#define SO_TYPE 3
#define SO_ERROR 4
#define SO_DONTROUTE 5
#define SO_BROADCAST 6
#define SO_SNDBUF 7
#define SO_RCVBUF 8
#define SO_SNDBUFFORCE 32
#define SO_RCVBUFFORCE 33
#define SO_KEEPALIVE 9
#define SO_OOBINLINE 10
#define SO_NO_CHECK 11
#define SO_PRIORITY 12
#define SO_LINGER 13
#define SO_BSDCOMPAT 14
#define SO_PASSCRED 16
#define SO_PEERCRED 17
#define SO_RCVLOWAT 18
#define SO_SNDLOWAT 19
#define SO_RCVTIMEO 20
#define SO_SNDTIMEO 21
#