UNP Chapter 13 - 高级I/O函数

摘要: 13.1. 概述首先是一个I/O函数设置超时,这有三种方法。然后是三个read和write函数的变体。13.2. 套接口超时有三种方法给套接口上的I/O操作设置超时1. 调用alarm,在到达指定时间时产生SIGALRM信号2. 使用select阻塞在等待I/O上,select内部有一个时间限制,以此代替在read或write调用上阻塞3. 使用新的SO_RCVTIMEO和SO——SNDTIMEO套接口选项前两种技术可以用于任何描述字,而第三种只能用于套接口描述字。用SIGALRM给connect设置超时//用SIGALRM给connect设置超时//下面是函数connect_timeo的代码 阅读全文
posted @ 2012-02-02 11:08 s7vens 阅读(632) 评论(0) 推荐(0) 编辑

UNP Chapter 12 - 守护进程和inetd超级服务器

摘要: 12.1. 概述守护进程(daemon)是在后台运行不受终端控制的进程。Unix系统中一般有很多守护进程在后台运行(20到50个),执行不同的管理任务。启动守护进程的几种方法:1. 在系统启动时很多守护程序都是由系统初始化脚本启动。2. 许多网络服务器是由inetd超级服务器启动的。3. cron守护进程按规则定期执行一些程序。4. 可用at命令指定在将来的某一时刻执行程序。5. 不管是在前台还是在后台,守护进程也可以在用户终端上启动,这在测试守护进程或守护进程因某些原因终止而要重启时经常使用。由于守护进程没有控制终端,再发生问题时它要用一些其他方式以输出消息,这些消息既有一般的通告消息,也有 阅读全文
posted @ 2012-02-01 14:14 s7vens 阅读(487) 评论(0) 推荐(0) 编辑

UNP Chapter 11 - 高级名字与地址转换

摘要: 11.1. 概述函数gethostbyname和gethostbyaddr是依赖于协议的,使用前一个函数时,我们必须知道放置结果的套接口地址结构的成员是哪一种(举例来说,IPv4使用sin_addr成员,IPv6使用sin6_addr成员),而调用后一个函数时,必须知道存放二进制地址的是哪一种成员。getaddrinfo和getnameinfo能为应用程序提供协议独立性。11.2. getaddrinfo函数#include <netdb.h>int getaddrinfo(const char * hostname, const char * service, const str 阅读全文
posted @ 2012-01-19 17:27 s7vens 阅读(674) 评论(1) 推荐(0) 编辑

UNP Chapter 10 - IPv4和IPv6的互操作性

摘要: 10.1 概述本章中假定所有的主机上都运行着双重协议栈(dual stacks)。10.2. IPv4客户和IPv6服务器拥有双重协议栈的主机的一个基本特性就是:其上运行的IPv6服务器既能应付IPv4客户,又能应付IPv6客户。这是通过使用IPv4映射的IPv6地址实现的。在一个双重协议栈的主机上,根据接收套接口的类型(TCP或UDP),对一个收到的IPv4或IPv6数据报进行处理的流程:10.3. IPv6客户与IPv4服务器客户与服务的组合情况总结10.4. IPv6地址测试宏有一小部分IPv6应用程序必须知道与其通信的对方是否使用IPv4协议,这些应用程序需要知道对方的地址是不是一个I 阅读全文
posted @ 2012-01-19 16:04 s7vens 阅读(962) 评论(0) 推荐(0) 编辑

UNP Chapter 9 - 基本名字与地址转换

摘要: 9.1. 概述本章讲述在名字和数值地址间进行转换的函数:gethostbyname和gethostbyaddr在主机名字与IP地址间进行转换,getservbyname和getservbyport在服务器名字和端口号间进行转换。9.2. 域名系统DNS(Domain Name System)主要用于主机名与IP地址间的映射。主机名可以是简单名字,如solaris或bsdi,也可以是全限定域名FQDN(Fully Qualified Domain Name),如solaris.kohala.comDNS中的条目称为资源记录RR(resource record):A -- A记录将主机名映射为32 阅读全文
posted @ 2012-01-18 15:47 s7vens 阅读(747) 评论(0) 推荐(0) 编辑

UNP Chapter 8 - 基本UDP套接口编程

摘要: 8.1. 概述有些流行的应用程序是用UDP实现的:DNS(域名系统),NFS(网络文件系统),SNMP(简单网络管理协议)就是这样的例子。8.2. recvfrom和sendto函数这两个函数类似于标准的read和write函数,但要求有三个附加参数#include <sys/socket>ssize_t recvfrom(int sockfd, void * buff, size_t nbytes, int flags, struct sockaddr * from, socklen_t * addrlen); // 返回: 读写字节数-成功, -1-出错ssize_t send 阅读全文
posted @ 2012-01-13 16:41 s7vens 阅读(593) 评论(0) 推荐(0) 编辑

UNP Chapter 7 - 套接口选项

摘要: 7.1. 概述7.2. getsockopt和setsockopt函数这两个函数仅用于套接口#include <sys/socket.h>int getsockopt(int sockfd, int level, int optname, void * optval, socklen_t * optlen); // 返回: 0-OK, -1-出错int setsockopt(int sockfd, int level, int optname, const void * optval, socklen_t * optlen); // 返回: 0-OK, -1-出错sockfd必须指 阅读全文
posted @ 2012-01-11 15:55 s7vens 阅读(504) 评论(0) 推荐(0) 编辑

UNP Chapter 6 - I/O复用: select和poll函数

摘要: 6.1.概述我们需要这样的能力:如果一个或多个I/O条件满足时,例如,输入已经准备好被读,或者描述字可以承接更多的输出,我们就被通知到。这个能力称为I/O复用,是由函数select和poll支持的。I/O复用典型地用在下列网络应用场合:1.当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。2.一个客户同时处理多个套接口是可能的,但是很少出现。3. 如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。4. 如果一个服务器既要处理TCP,又要处理UDP,一般也要使用I/O复用。5. 如果一个服务器要处理多个服务或者多个协议,一般要使用I/ 阅读全文
posted @ 2012-01-05 17:24 s7vens 阅读(644) 评论(0) 推荐(0) 编辑

APUE Chapter 5 - Standard I/O Library

摘要: 5.1. Introduction5.2. Streams and FILE ObjectsWith the standard I/O library, the discussion centers around streams.Initially, when a stream is created, it has no orientation. If a multibyte I/O function is used on a stream without orientation, the stream's orientation is set to wide-oriented. If 阅读全文
posted @ 2011-12-30 16:22 s7vens 阅读(277) 评论(0) 推荐(0) 编辑

UNP Chapter 5 - TCP客户-服务器程序例子

摘要: 5.1. 概述5.2. TCP echo server程序: main函数5.3. TCP echo server程序: str_echo函数5.4. TCP echo client程序: main函数5.5. TCP echo client程序: str_cli函数5.6. 正常启动5.7. 正常终止5.8. Posix信号处理每个信号都有一个处理办法(disposition),也称为与此信号关联的行为(action)。我们通过调用函数sigaction来设置一个信号的处理办法。1.可以提供一个函数,在信号发生时随即调用。这个函数称为信号处理函数(signal handler),而此行为便称 阅读全文
posted @ 2011-12-22 15:05 s7vens 阅读(465) 评论(0) 推荐(0) 编辑