1 概述 之间的学习中发现,传统的阻塞式系统调用不仅浪费进程运行时间,而且会带来狠毒问题.因此进程需要有一种预先告知内核的能力,使得内核一旦发现进程指定的一个或者多个I/O条件就绪,它就通知进程.这个能力称为I/O复用,是由select和poll函数支持的. I/O复用的典型使用场景: 当客户处理多个描述符(通常是交互输入和网路套接字)时,必须使用I/O复用 一个客户同时处理多个套接字 如果一个TCP服务器既要处理监听套接字,也要处理已连接套接字,一般就要使用I/O复用 如果一个服务器既要处理T…
本博文主要针对UNP一书中的第六章内容来聊聊I/O复用技术以及其在网络编程中的实现 1. I/O复用技术 I/O多路复用是指内核一旦发现进程指定的一个或者多个I/O条件准备就绪,它就通知该进程.I/O复用适用于以下场合: (1) 当客户处理多个描述符(一般是交互式输入或网络套接字),必须适用I/O复用 (2) 当一个客户处理多个套接字时,这种情况很少见,但也可能出现 (3) 当一个TCP服务器既要处理监听套接字,又要处理已连接套接字,一般就要使用I/O复用 (4) 如果一个服务器既要适用TCP,…
域名系统 域名系统(Domain Name System,DNS)主要用于主机名字与IP地址之间的映射. 主机名既可以是一个简单得名字,如solaris,也可以是一个全限定域名,如solaris.unpbook.com. 资源记录 DNS中的条目称为资源记录(resource record,RR) A记录把一个主机名映射成一个32位的IPv4的地址. AAAA记录把一个主机名映射成一个128位的IPv6地址. PTR记录把IP地址映射成主机名. MX记录把一个主机指定作为主机的“邮件交换器(ma…
UNIX网络编程 第6章 I/O复用:select和poll函数…
转自:http://www.cppblog.com/myjfm/archive/2011/10/26/159093.aspx select()函数和poll()函数均是主要用来处理多路I/O复用的情况.比如一个服务器既想等待输入终端到来,又想等待若干个套接字有客户请求到达,这时候就需要借助select或者poll函数了. (一)select()函数 原型如下: 1 int select(int fdsp1, fd_set *readfds, fd_set *writefds, fd_set *e…
select与poll函数介绍 在所有依从POSIX的平台上,select函数使我们可以执行I/O多路转接.传向select的参数告诉内核: 1)我们所关心的描述符 2)对于每个描述符我们所关心的状态(是否读一个给定的描述符?是否想写一个给定的描述符?是否关心一个描述符的异常状态?) 3)愿意等待多长时间(可以永远等待,也可以等待一个固定量时间,或完全不等待) 从select返回时,内核告诉我们: 1)已准备好的描述符的数量 2)对于读.写或异常这三个状态中的每一个,哪些描述符已准备好 使用这些…
I/O模型 首先我们将查看UNIX下可用的5种I/O模型的基本区别: 1.阻塞式I/O 2.非阻塞式I/O 3.I/O复用(select和poll) 4.信号驱动式I/O(SIGIO) 5.异步I/O(POSIX的aio_系列函数) 阻塞式I/O模型 最流行的I/O模型是阻塞式I/O模型,下面以数据报套接字作为例子,有如下的情形 非阻塞式I/O模型 进程把一个套接字设置成非阻塞式通知内核:当锁请求的I/O操作非得把本进程投入睡眠才能完成时,不要把本进程投入睡眠,而是返回一个错误 前三次调用rec…
本章讨论我们笼统地归为“高级I/O”的各个函数和技术 套接字超时 有3种方法在涉及套接字的I/O操作上设置超时 1.调用alarm,它在指定超时时期满时产生SIGALRM信号 2.在select中阻塞等待I/O(select有内置的时间限制),以此代替直接阻塞在read或write调用上 3.使用较新的SO_RCVTIMEO和SO_SNDTIMEO套接字选项. 使用SIGALRM为connect设置超时 下面给出我们的connect_timeo函数,它以调用者指定的超时上限调用connect /…
我们将在本章使用前一章中介绍的基本函数编写一个完整的TCP客户/服务器程序实例 这个简单得例子是执行如下步骤的一个回射服务器: TCP回射服务器程序 #include "unp.h" int main(int argc, char **argv) { int listenfd, connfd; pid_t childpid; socklen_t clilen; struct sockaddr_in cliaddr, servaddr; listenfd = Socket(AF_INET…
cubrid的中sql查询语法 SELECT [ ] [{TO | INTO} ][FROM ] [WHERE ][GROUP BY {col_name | expr} [ASC | DESC], ...[WITH ROLLUP]] [HAVING ] [ORDER BY {col_name | expr} [ASC | DESC], ... [NULLS {FIRST | LAST}][LIMIT [offset,] row_count] [USING INDEX { index_name […