使用gethostbyname r得到dns資訊

2021-09-30 07:59:14 字數 1162 閱讀 3965

在網路開發中 經常出現需要從主機名得到ip位址的情況 這時就使用gethostbyname

但是因為gethostbyname返回的是乙個指向靜態變數的指標 不可重入

很可能剛要讀時值就被其它執行緒修改

所以 新的posix中增加了另乙個可重入的從主機名(網域名稱)得到dns的孫數

gethostbyname_r

下面是它用法的簡單例子

code

#include

#include

#include

#define dump(...)   printf(__va_args__)

int main(int argc,char** ar**) -

| |     if(gethostbyname_r(ar**[1],&hostinfo,buf,sizeof(buf),&phost,&ret))

|         printf("error:gethostbyname(%s) ret:%d,phost:%d/n",ar**[1],ret,(int)ph

| ost);

-     else |

|     return 0;

| }程式結果如下

code

wushuang:/var/www#  ~/work/test/test www.google.com

argc:2

gethostbyname(www.google.com) success:ret:0,phost(-1073744112):name:www.google.akadns.net,addrtype:2(af_inet:2),len:4,addr[0]:-1073743784,[1]:0

host(-1073744112) alias is:www.google.com

host addr is:64.233.161.104

wushuang:/var/www#

hostent結構定義及說明如下

code

struct hostent

#define h_addr  h_addr_list[0]  /* for backward compatibility */

當h_addrtype == 4時,h_addr_list返回的就是 in_addr型別的值,可以使用inet_ntoa把它轉換成ip字串

gethostbyname 簡明用法

使用這個東西,首先要包含2個頭檔案 這個函式的傳入值是網域名稱或者主機名,例如 www.google.com wpc 等等。傳出值,是乙個hostent的結構 如下 如果函式呼叫失敗,將返回null。解釋一下這個結構,其中 char h name 表示的是主機的規範名。例如www.google.co...

gethostbyname 函式說明

gethostbyname 函式說明 用網域名稱或主機名獲取ip位址 包含標頭檔案 include include 函式原型 struct hostent gethostbyname const char name 這個函式的傳入值是網域名稱或者主機名,例如 www.google.cn 等等。傳出值...

linux下gethostbyname工作原理

既然這兩個函式能夠轉換 ip 和網域名稱,那麼,它們就會去訪問dns伺服器嗎?如果真的要去訪問,網路不通的情況下,它們又怎麼辦呢?帶著這些疑問,我在網上查了一下,並根據提示,做了一下試驗,簡單總結了一下 gethostbyname 網域名稱 ip gethostbyaddr ip 網域名稱 在解析的...