今天主要讲一下MTK socket 基本接口。MTK socket 主要是基于 Berkeley sockets,用起来也就大同下异。MTK socket 主要有三种模式:block(阻塞),non-block(非阻塞),Asynchronous(异步),组合方式 也只有三种 1 block ,2 non-block,3 non-block + Asynchronous。
block模式下,调用相应的函数(接受或者发送数据),如果这个函数动作没有完成(没有发送或者接受完成),那么函数就不会反回,那么调用的整个task,就会阻塞,进行不了任何动作。如果在MMI MOD 里面直接用这个,那是很危险的,会出现手机没有响应这种假死现象,所以几乎不用这个模式。
non-block 模式下,调用相应的函数,可能返回ok或者block,大部分情况下返回block,表示数据还没有处理完毕,但是函数会立即返回。但是什么时候表示数据处理完成呢,这也是一个比较头疼的事情。这个时候要配合select函数来一起使用,这样就需要自己轮询去查询相应的socket是否可以使用了。一般也不用,效率比较低。
non-block + Asynchronous模式:这个模式推荐使用,可以编成工作中几乎就用这种方式,non-block,就不会阻塞,不会让应用看起来假死,Asynchronous模式,那么当使用函数返回block时,app 只要注册相应的回调函数,当数据处理完毕了,就会收到相应的通知,不用自己去轮询,效率也就高了。
MTK socket 接口声明都在头文件 soc_api.h,接口名字都以soc_ 开头。
1 soc_create 创建一个socket
/* * 创建一个socket * domain: 协议,现在只支持 SOC_PF_INET * type : 该domain 下的类型,现在有 SOC_SOCK_STREAM(TCP),SOC_SOCK_DGRAM(UDP),SOC_SOCK_SMS,SOC_SOCK_RAW * protocol: 协议类型,除了type 为 SOC_SOCK_RAW,其他都为 0 * mod_id: 当前模块ID,主要用于接受消息 * nwk_account_id:apn 接入点 */ kal_int8 soc_create(kal_uint8 domain, socket_type_enum type, kal_uint8 protocol, module_type mod_id, kal_uint32 nwk_account_id);
就说了一个函数,有没时间了。。。
待续