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 %p\n", timems, channelP);
        if (waitForWrite)
            fprintf(stderr, "Waiting %u milliseconds for channel %p "
                    "to be writable\n", timems, channelP);
    }
    (*channelP->vtbl.wait)(channelP, waitForRead, waitForWrite, timems,
                           readyToReadP, readyToWriteP, failedP);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值