《UNIX网络编程 卷1》的源码能够从www.unpbook.com下载获得。解压以后的目录为unpv13e。html
进入unpv13e目录,按以下步骤编译:编程
1 ./configure 2 3 cd lib 4 make // 可能遇到问题:redefinition of ‘struct in_pktinfo’ 5 6 cd ../libfree 7 make 8 9 cd ../libroute 10 make //这一步可能会出错,可忽略,只是表示你的系统不支持 4.4BSD,并不影响对该书的学习 11 12 cd ../libgai 13 make
针对上边的问题‘redefinition of ‘struct in_pktinfo’,咱们须要将unpv13e/key/unp.h及unpv13e/sctp/unp.h中的“struct in_pktinfo”结构体声明注释掉,由于它已经被包含在标准头文件bits/in.h中了。修改以后须要从新编译 。vim
以上步骤会生成一个静态库libunp.a。服务器
1 cd .. //回到 unpv13e 目录 2 sudo cp libunp.a /usr/lib 3 sudo cp libunp.a /usr/lib64
1 vim lib/unp.h //将 unp.h 中#include "../config.h"修改成#include "config.h" 2 sudo cp lib/unp.h /usr/include 3 sudo cp config.h /usr/include
1)编译时必须加上静态连接库:-l 参数加上 libunp.a 去掉lib和后面的.a。最后获得参数-lunp网络
1 cd ./intro 2 gcc daytimetcpcli.c -o daytimetcpcli -lunp
2)测试上面生成的可执行文件获取本机当前日期:tcp
1 ./daytimetcpcli 127.0.0.1
在进行测试时会出现如下错误:学习
1 connect error:Connection refused
3)该错误表示 daytime 服务程序没开,可经过 xinetd来实现对服务链接请求的控制。如下经过 xinetd 开启 daytime 服务程序。测试
1 sudo cd /etc/xinetd.d/ 2 sudo vim daytime
若是xinetd.d文件夹是空的,则须要先安装xinetd服务:spa
1 sudo yum install xinetd.x86_64
将 daytime-stream 和 daytime-dgram 两个文件中的 disable = yes 修改为 disable = no,并保存退出,而后重启 xinetd:.net
1 service xinetd restart
4)再次测试该例子,能成功显示本机时间:
1 ./daytimetcpcli 127.0.0.1 2 22 JUN 2015 15:20:03 CST
《网络编程》关于 UNIX网络编程 卷1 的 unp.h 和源码编译问题