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),而此行为便称为捕获(catching)信号。有两个信号不能捕获SIGKILL和SIGSTOP,函数由信号值这一单一参数来调用且无返回值,函数原型为

void handler(int signo);

信号SIGIO,SIGPOLL,SIGURG还要求捕获它的进程有其它动作。
2. 可以通过设置信号的处理办法为SIG_IGN来忽略它,但是SIGKILL和SIGSTOP不能忽略。
3. 可以设置信号的处理办法为SIG_DFL来为它设置缺省处理办法。

函数signal的函数原型层次复杂

void ( * signal (int signo, void ( * func)(int) ) )(int);

用typedef简化函数原型

typedef void Sigfunc(int); // 它说明信号处理程序是带有一个整形参数且无返回值的函数

这样signal的函数原型就变为

Sigfunc * signal (int signo, Sigfunc * func); // 此函数的第二个参数和返回值都是指向信号处理函数的指针

 

5.9. 处理SIGCHLD信号

设置僵尸(Zombie)状态的目的就是维护子进程的信息,以便父进程在稍后的某个时候取回。如果一个进程终止,且该进程有子程序处于僵尸状态,则所有僵尸子进程的父进程ID均置为1(init进程),init进程将作为这些子进程的继父,并负责清除他们(也就是说,init进程将wait它们,从而去除僵尸进程),有些Unix系统给僵尸进程输出的COMMAND列为<defunct>(ps命令输出)。

5.10. wait和waitpid函数

#include <sys/wait.h>
pid_t wait(int *statloc); //返回: 进程ID为0成功,-1出错
pid_t waitpid(pid_t pid, int *statloc, int options); //返回: 进程ID为0成功,-1出错

函数wait和waitpid均返回两个值: 函数的返回值是终止子进程的进程ID号,子进程的终止状态(一个整数)则是通过指针statloc返回的。

5.11. accept返回前连接夭折

5.12. 服务器进程终止

5.13. SIGPIPE信号

5.14. 服务器主机崩溃

5.15. 服务器主机崩溃后重启

5.16. 服务器主机关机

5.17. TCP程序例子小结

5.18. 数据格式

5.19. 小结

5.20. 习题



posted on 2011-12-22 15:05  s7vens  阅读(465)  评论(0编辑  收藏  举报