socket和select
1) <pj/sock.h>
第一部分,包含一些socket使用的常用宏定义,宏定义前缀为PJ_。比如:PJ_INVALID_SOCKET
在操作系统的定义基础上,统一定义,统一名称和数值。属于在操作系统上的封装层。
跨平台移植的基本操作。
<pj/sock_select.h>
对select函数使用的封装。
跨平台移植的基本操作。
ioqueue
1) ioqueue是一套事件驱动的接口。和select类似,也是对socket收发事件进行统一处理的模块机制。
pjmedia进行音视频网络传输使用的是这一套接口。支持多线程驱动。
2) ioqueue 包含的文件
<pj/ioqueue.h> <ioqueue_common_abs.c> <ioqueue_common_abs.h>
<ioqueue_select.c>
<ioqueue_epoll.c>
<ioqueue_winnt.c>
<ioqueue_kqueue.c>
<ioqueue_symbian.cpp> 不重要,塞班操作系统实现
<ioqueue_uwp.cpp> 不重要,uwp实现
ioqueue 接口框架有多种实现方式,比较重要的是 select实现<ioqueue_select.c> ,这个接口比较通用,多种操作系统都可以使用。也有一些缺陷,也是select,比如 性能相当较低,socket fd数值不能超过 1024 等。
<ioqueue_epoll.c> 是ioqueue的epoll 实现。在Unix类操作系统中可以使用,比如linux内核的操作系统,Ubuntu, centos,Android等操作系统中可以使用该实现。
<ioqueue_winnt.c> 是Windows下的IOCP接口实现。epoll和iocp的差别 。
<ioqueue_kqueue.c> kqueue被用在FreeBSD,NetBSD, OpenBSD, DragonFly BSD, 和 macOS中。
我们可以根据自己的目标操作系统选择一个(只能选择一个)合适的ioqueue实现,将其编译链接到应用程序中。