問題來源:
接觸samba已經有一段時間了,前段時間遇到了ipv6訪問samba服務器失敗的問題,這個問題花費了時間挺長,現在將它記錄下來。
衆所周知,samba源碼編譯後可以同時支持ipv4和ipv6訪問,對於samba在ubuntu的下載與安裝,可以參考我的博文(https://blog.csdn.net/u010990478/article/details/102581475),之所以會遇到上述問題,本人需要對官網的samba源碼進行剪裁,使之可以運行在特定的嵌入式板子上。
錯誤原因:
在samba-4.0.24\lib\replace路徑下,存在名爲getaddrinfo.c的文件,該文件說明如下圖所示,主要定義了一些函數,如getaddrinfo等,在當前平臺沒有這些函數時可以使用。但都只支持ipv4,不支持ipv6。我當前使用的嵌入式板子集成了linux kernel,具有getaddrinfo等庫函數。而我錯誤在makefile中編譯了此文件,導致samba ipv6 server一直建立失敗。
解決方案:
在makefile中去掉對getaddrinfo.c文件的編譯,並且在samba的config.h文件中聲明本平臺支持getaddrinfo函數功能即#define HAVE_GETADDRINFO 1
對於getaddrinfo函數,大家可以參考博文:
https://www.cnblogs.com/fnlingnzb-learner/p/7542770.html
https://linux.die.net/man/3/getaddrinfo
https://www.cnblogs.com/battzion/p/4235562.html