UNP学习总结(一)】的更多相关文章

UNIX域协议是在单个主机上执行客户/服务器通信的一种方法 使用UNIX域套接字有以下3个理由: 1.UNIX域套接字往往比通信两端位于同一个主机的TCP套接字快出一倍 2.UNIX域套接字可用于在同一个主机上的不同进程之间传递描述符 3.UNIX域套接字较新的实现把客户的凭证提供给服务器,从而能够提供额外的安全检查措施 UNIX域中用于标识客户和服务器的协议地址是普通文件系统的路径名.这些路径名不是普通的UNIX文件: 除非他们和UNIX域套接字关联起来,否则无法读写这些文件. 可以查看之前a…
本章讨论我们笼统地归为“高级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 /…
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…
我们将在本章使用前一章中介绍的基本函数编写一个完整的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…
1.发现网络拓扑的几个重要的命令 (1).netstat -i 提供网络接口的信息.我们还指定-n 标志以输出数值地址,而不是试图把它们反向解析成名字.netstat -r 展示路由表. dzhwen@deng:~/unpv13e/intro$ netstat -ni Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 BMU eth1 BMRU l…
本文是UNP复习系列的第二篇,主要包括了以下几个内容 UNIX系统下5种I/O模型 阻塞.非阻塞,同步.异步 epoll函数用例 一.Unix下的五种可用I/O模型 阻塞式I/O模型 阻塞式I/O是最简单的I/O模型.也是系统默认的I/O模型. 图中采用了recvfrom(),使用TCP时候的read()时也是类似的. read()或者recvfrom()被作用于阻塞的文件描述符时,直到数据报到达且被复制到应用进程的缓冲区种或者发生错误时才返回,最常见的错误时被信号中断. 非阻塞式I/O模型 非…
本文主要为对UNP第五章部分内容的实验和总结. UNP第五章对一个echo服务器和客户端在各种连接状态下的表现做了详细的分析,包括了: 正常启动和终止: accept返回前连接中止: 服务器进程终止: 客户进程忽略读错误继续写数据: 服务器主机崩溃: 服务器主机崩溃后重启: 服务器主机关机. 连接模型是最简单的TCP连接模型: 程序代码基本以UNP中提供代码为主.服务器采用图5-12.图5-11和图5-3中的代码:客户端采用图5-4和图5-5中的代码.为简化分析不采用UNP中客户端连续向服务器发…
TCP测试用客户程序 #include "unp.h" #define MAXN 16384 /* max # bytes to request from server */ int main(int argc, char **argv) { int i, j, fd, nchildren, nloops, nbytes; pid_t pid; ssize_t n; char request[MAXLINE], reply[MAXN]; ) err_quit("usage:…
线程有时称为轻权进程(lightweight process) 同一进程内的所有线程共享相同的全局内存.这使得线程之间易于共享信息,然后这样也会带来同步的问题 同一进程内的所有线程处理共享全局变量外还共享: 1.进程指令 2.大多数数据 3.打开的文件(即描述符) 4.信号处理函数和信号处置 5.当前工作目录 6.用户ID和组ID 不过每个线程有各自的: 1.线程ID 2.寄存器集合,包括程序计数器和栈指针 3.栈(用于存放局部变量和返回地址) 4.errno 5.信号掩码 6.优先级 基本线程…
信号驱动式I/O是指进程预先告知内核,使得当某个描述符发生某事时,内核使用信号通知相关进程. 套接字的信号驱动式I/O 针对一个套接字使用信号驱动式I/O(SIGIO)要求进程执行以下3个步骤: 1.建立SIGIO信号的信号处理函数 2.设置该套接字的属主,通常使用fcntl的F_SETOWN命令设置 3.开启该套接字的信号驱动式I/O,通常通过使用fcntl的F_SETFL命令打开O_ASYNC标志完成 对于UDP套接字的SIGIO信号 在UDP上使用信号驱动式I/O是简单得.SIGIO信号在…