FreeSWITCH - mod_xml_rpc源码分析二channel.c
初始化和卸载在文件的开头处出现了两个函数:socketOsInit和socketOsTerm。很明显,这是为了跨平台而设的函数,函数内部依据平台用相应代码实现特定的初始化和卸载任务。可以看到,如果是在windows平台下编译,将分别调用SocketWinInit和SocketWinTerm。这两个函数在之前分析socket_win.c文件时介绍过。估计是考虑到在初始化和卸载时可能会有库相关的处理,所以又引入了两个函数ChannelInit和ChannelTerm。相较于socketOsInit函数,ChannelInit函数只是多了是否打开调试信息标志的处理。这个标志将依赖于环境变量ABYSS_CHANNEL_TRACE是否被设置。有一点不解的地方是,为何库内初始化底层socket的函数名是ChannelInit。因为,在分析socket_win.c文件时TChannel结构体是被定义为封装连接上服务端的socket连接。
其他函数其他函数都很简单。基本上都如下面这个ChannelWait函数一样,最终调用了TChannel保存的函数指针。 void ChannelWait(TChannel * const channelP,bool const waitForRead,bool const waitForWrite,uint32_t const timems,bool * const readyToReadP,bool * const readyToWriteP,bool * const failedP) { if (ChannelTraceIsActive) { if (waitForRead) fprintf(stderr,"Waiting %u milliseconds for data from " "channel %pn",timems,channelP); if (waitForWrite) fprintf(stderr,"Waiting %u milliseconds for channel %p " "to be writablen",channelP); } (*channelP->vtbl.wait)(channelP,waitForRead,waitForWrite,readyToReadP,readyToWriteP,failedP); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c# – 为什么值类型继承自引用类型?
- 如何使用openURL在Swift中打电话?
- React Native 之 Text 文字添加阴影效果
- [RN] React Native 使用开源库 react-native-image-crop-pi
- 关于oracle连“System.Data.OracleClient需要Oracle客户端软
- 常用正则表达式
- cocos2d-iphone – 如何在Cocos2d中检索子精灵的绝对位置(即
- Cocos2d-x3.2与OpenGL渲染总结(一)Cocos2d-x3.2的渲染流程
- flex与html交互和js调用
- Cocos2d-x移植到WindowsPhone8移植问题-libNetwork库移植问