引言
光说不练假把式,边书边实验能够加深印象,也更有趣。接下来让我们看看如何运行《UNIX网络编程》书上代码吧!
配置环境
《UNIX网络编程:卷一》这本书籍的原始代码在:www.unpbook.com,初始环境配置大家可以参考该网址链接的github仓库。
接着我们进入第五章代码,我这里保存的目录是/opt之下,大家需要做相应替换。
$ cd /opt/unpv13e/tcpcliserv
用make命令编译整个文件,方便高效。
$ make
接下来我们可以在文件夹中看到可执行文件。
)
执行
启动服务器
启动服务器,用stat查看网络状态
$ ./tcpserv01 &
$ netstat -a | grep 9877
服务器将处于监听状态:
tcp 0 0 *:9877 *:* LISTEN
启动客户端
同一机器上启动客户端,
$ ./tcpcli01 127.0.0.1
终止客户端
按下ctrl+D,相当于EOF字符,并查看网络状态
tcp 0 0 *:9877 *:* LISTEN
tcp 0 0 localhost:60290 localhost:9877 TIME_WAIT
当前连接的客户端进入了 TIME_WAIT 状态。
进程的状态
用 ps 命令来检查这些进程的状态和关系。
$ ps -a -o pid,ppid,stat
进程状态如下:
PID PPID STAT
25729 25725 Ss
26245 25729 S
26441 26245 Z
26443 25729 T
26452 25729 R+
PID=26729为服务器父进程,因为等待连接处于睡眠状态。父进程未处理SIGCHLD 信号,子进程PID=26441于是进入僵死状态。
如何改进
需要调用waitpid函数来处理僵死进程。