WEB开发网
开发学院操作系统Linux/Unix TCP/IP 应用程序的通信连接模式 阅读

TCP/IP 应用程序的通信连接模式

 2008-08-23 08:18:32 来源:WEB开发网   
核心提示: 图 8 TCP/IP 应用并发 Server使用 I/O 多路技术实现多 Client 连接 以上三种连接设计,多 Server 端口、多 accept() 和并发服务器模式,TCP/IP 应用程序的通信连接模式(7),都是通过 fork() 系统调用产生多进程来实现多 Client 连接

图 8 TCP/IP 应用并发 Server

TCP/IP 应用程序的通信连接模式

使用 I/O 多路技术实现多 Client 连接

以上三种连接设计,多 Server 端口、多 accept() 和并发服务器模式,都是通过 fork() 系统调用产生多进程来实现多 Client 连接的。使用 I/O 多路技术也可以同时处理多个输入与输出问题,即用一个进程同时处理多个文件描述符。I/O 多路技术是通过 select() 或 poll() 系统调用实现的。poll() 与 select() 功能完全相同,但是 poll() 可以更少使用内存资源以及有更少的错误发生。select() 调用需要与操作文件描述符集的 APIs 配合使用。select() 系统调用可以使一个进程检测多个等待的 I/O 是否准备好,当没有设备准备好时,select() 处于阻塞状态中,其中任一设备准备好后,select() 函数返回调用。select() API 本身也有一个超时时间参数,超时时间到后,无论是否有设备准备好,都返回调用。其流程如图 9 所示。在 socket APIs listen() 和 accept() 之间插入 select() 调用。使用这三个宏 FD_ZERO()、FD_CLR() 和 FD_SET(),在调用 select() 前设置 socket 描述符屏蔽位,在调用 select() 后使用 FD_ISSET 来检测 socket 描述符集中对应于 socket 描述符的位是否被设置。 FD_ISSET() 就相当通知了一个 socket 描述符是否可以被使用,如果该 socket 描述符可用,则可对该 socket 描述符进行读写通信操作。通常,操作系统通过宏 FD_SETSIZE 来声明在一个进程中 select() 所能操作的文件或 socket 描述符的最大数目。更详细的 I/O 多路技术实现,可以参考其他相关文献。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:TCP IP 应用程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接