1.当数据到达目的endpoint后,将加入其维护的接收队列中,应用程序接收这些数据的时候对于不同的通信模式会有所不同。
channels模式将采用FIFO的方式接收。
messages模式将采用FIFO order perpriority level(优先级队列)的方式接收。
以上的FIFO队列都是限制大小的,当队列满了之后会返回错误代码或者直接阻塞。mcapi_endpoint_get/set_attribute()可用来查询或者控制给定endpoint的队列大小。
注:
l 如果应用程序在接收所有receivequeue数据之前终止了连接,那么在receive queue中的数据就会丢失。
l 直到使用mcapi_pktchan_release()来手动释放databuffer,MCAPI将会重复使用。
l 不管是哪种通信模式其函数都有阻塞与非阻塞两种模式,_i后缀用来表示非阻塞模式。
2.Buffer 管理
在Buffer管理中MCAPI提供两种传输方式:MCAPImessages & MCAPI packet channels(区别之一就是是否面向连接)。
message方式的API提供”user-specifiedbuffer”通信接口:由程序员来规定buffer无需通过MCAPI 调用来分配和释放空间。
packet channels方式提供”system-specifiedbuffer”通信接口,接收方将会获得一个buffer data的地址,这个地址由当前正在运行的系统进行返回,对于packet channel来说由于接收方的buffer由系统分配,因此程序员必须调用mcapi_pktchan_release()
3.数据类型
为保证了MCAPI的可移植性以及与MCA的兼容性,其数据做了大量的typedef。其中以mca_开头的数据类型在mca.h中定义,整理如下:
4.endpoint属性
MCAPI endpointattributes 提供对endpoint特性或者状态的访问。这些属性多以#define或者typedef在头文件(mcapi.h)中定义,具体实现时可设计为只读。一些endpoint attribute必须具备Channel兼容性,即对于一个已连接成功的Channel其两端的endpoint的该属性必须具备相同值。整理如下: