《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 和源碼編譯問題