@H_
301_0@
初始化和卸载
@H_
301_0@在
文件的开头处出现了两个
函数:socketOsInit和socketOsTerm。很明显,这是为了跨平台而设的
函数,
函数内部依据平台用相应
代码实现特定的初始化和卸载任务。可以看到,如果是在windows平台下编译,将分别
调用SocketWinInit和SocketWinTerm。这两个
函数在之前分析socket_win.c
文件时介绍过。估计是考虑到在初始化和卸载时可能会有库相关的处理,所以又引入了两个
函数ChannelInit和ChannelTerm。相较于socketOsInit
函数,ChannelInit
函数只是多了是否打开调试信息标志的处理。这个标志将依赖于环境变量ABYSS_CHANNEL_TRACE是否被设置。有一点不解的地方是,为何库内初始化底层socket的
函数名是ChannelInit。因为,在分析socket_win.c
文件时TChannel结构体是被定义为封装连接上服务端的socket连接。
@H_
301_0@
@H_
301_0@其他
函数都很简单。基本上都如下面这个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",channelP);
}
(*channelP->vtbl.wait)(channelP,waitForRead,waitForWrite,readyToReadP,readyToWriteP,FailedP);
}