《Unix网络编程》两卷备受赞誉,另外四本传世经典《TCP/IP详解》(3卷)和《Unix环境高级编程》更是让W.Richard Stevens如同神一般的存在。最近入手了其中两本《Unix网络编程》准备开启网络编程的学习之旅。
书本配套源码地址:http://www.unpbook.com/src.html
编译环境:Ubuntu16.04-64
首先解压源文件,打开主文件夹下README文件,上面有源代码编译步骤。
===============
Execute the following from the src/ directory:
./configure # try <span class="hljs-keyword">to</span> figure <span class="hljs-keyword">out</span> all implementation differences
cd lib # <span class="hljs-keyword">build</span> the basic <span class="hljs-keyword">library</span> that all programs need
make # <span class="hljs-keyword">use</span> <span class="hljs-string">"gmake"</span> everywhere <span class="hljs-keyword">on</span> BSD/OS systems
cd ../libfree # continue building the basic <span class="hljs-keyword">library</span>
make
cd ../libroute # <span class="hljs-keyword">only</span> <span class="hljs-keyword">if</span> your <span class="hljs-keyword">system</span> supports <span class="hljs-number">4.4</span>BSD <span class="hljs-keyword">style</span> routing sockets
make # <span class="hljs-keyword">only</span> <span class="hljs-keyword">if</span> your <span class="hljs-keyword">system</span> supports <span class="hljs-number">4.4</span>BSD <span class="hljs-keyword">style</span> routing sockets
cd ../libxti # <span class="hljs-keyword">only</span> <span class="hljs-keyword">if</span> your <span class="hljs-keyword">system</span> supports XTI
make # <span class="hljs-keyword">only</span> <span class="hljs-keyword">if</span> your <span class="hljs-keyword">system</span> supports XTI
cd ../intro # <span class="hljs-keyword">build</span> <span class="hljs-keyword">and</span> <span class="hljs-keyword">test</span> a basic <span class="hljs-keyword">client</span> program
make daytimetcpcli
./daytimetcpcli <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span>
If all that works, you’re all set to start compiling individual programs.
Notice that all the source code assumes tabs every 4 columns, not 8.
MORE DETAILS
============
在终端用tree -L 1看一下源码的结构:
.
├── aclocal.m4
├── advio
├── bcast
├── config.guess
├── config.h
├── config.h.in
├── config.log
├── config.status
├── config.sub
├── configure
├── configure.in
├── debug
├── DISCLAIMER
├── icmpd
├── inetd
├── install-sh
├── intro
├── ioctl
├── ipopts
├── key
├── lib
├── libfree
├── libgai
├── libroute
├── libunp.a
├── Make.defines
├── Make.defines.in
├── Makefile
├── Makefile.in
├── mcast
├── mysdr
├── names
├── nonblock
├── oob
├── ping
├── README
├── route
├── rtt
├── sctp
├── select
├── server
├── sigio
├── sock
├── sockopt
├── sparc64-unknown-freebsd5.1
├── ssntp
├── streams
├── tcpcliserv
├── test
├── threads
├── traceroute
├── udpcksum
├── udpcliserv
├── unixdomain
└── VERSION
首先执行./configure进行整体配置,再进入lib目录执行make命令即可,中间的三步分别进入libfree/libroute/libxti执行make可以省略,最后进入intro文件夹执行make daytimetcpcli命令,若直接执行./daytimetcpcli 127.0.0.1会出现:
connect error: Connection refused的错误。因为linux系统默认关闭daytime服务,所以需要手动开启。
再次用tree命令查看intro文件夹文件结构:
.
├── byteorder
├── byteorder.c
├── byteorder.o
├── daytimetcpcli
├── daytimetcpcli1
├── daytimetcpcli1.c
├── daytimetcpcli1.o
├── daytimetcpcli2
├── daytimetcpcli2.c
├── daytimetcpcli2.o
├── daytimetcpcli3
├── daytimetcpcli3.c
├── daytimetcpcli3.o
├── daytimetcpcli.c
├── daytimetcpcli.o
├── daytimetcpcliv6
├── daytimetcpcliv6.c
├── daytimetcpcliv6.o
├── daytimetcpsrv
├── daytimetcpsrv1
├── daytimetcpsrv1.c
├── daytimetcpsrv1.o
├── daytimetcpsrv2
├── daytimetcpsrv2.c
├── daytimetcpsrv2.o
├── daytimetcpsrv3
├── daytimetcpsrv3.c
├── daytimetcpsrv3.o
├── daytimetcpsrv.c
├── daytimetcpsrv.lc
├── daytimetcpsrv.o
├── daytimetcpsrvv6
├── daytimetcpsrvv6.c
├── daytimetcpsrvv6.o
├── Makefile
├── truss.solaris.2.6
└── truss.unixware.2.1
在intro文件夹下重现开启一个终端,执行sudo ./daytimetcpsrv即可打开daytime服务。
此时,在原终端再次执行./daytimetcpcli 127.0.0.1,可以返回系统当前时间:
Mon Apr 3 16:52:13 2017