關(guān)于socket 編程的一些函數(shù)
getaddrinfo
據(jù)傳說包含頭文件 #include <netdb.h>中
getaddrinfo函數(shù)允許將一個(gè)主機(jī)名字和服務(wù)名字映射到一個(gè)地址瓜喇。
由getaddrinfo返回的所有存儲(chǔ)空間都是動(dòng)態(tài)獲取的,這些存儲(chǔ)空間必須通過調(diào)用freeaddrinfo返回給系統(tǒng)。
- 函數(shù)原型
int getaddrinfo( const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **result );
-
參數(shù)說明
- hostname
一個(gè)主機(jī)名或者地址串(IPv4的點(diǎn)分十進(jìn)制串或者IPv6的16進(jìn)制串) - service
服務(wù)名可以是十進(jìn)制的端口號(hào),也可以是已定義的服務(wù)名稱,如ftp砾赔、http等 - hints
可以是一個(gè)空指針,也可以是一個(gè)指向某個(gè)addrinfo結(jié)構(gòu)體的指針,調(diào)用者在這個(gè)結(jié)構(gòu)中填入關(guān)于期望返回的信息類型的暗示佳恬。 - result
本函數(shù)通過result指針參數(shù)返回一個(gè)指向addrinfo結(jié)構(gòu)體鏈表的指針。
- hostname
返回值:0——成功于游,非0——出錯(cuò)
addrinfo結(jié)構(gòu)
struct addrinfo {
int ai_flags; /* customize behavior */
int ai_family; /* address family */
int ai_socktype; /* socket type */
int ai_protocol; /* protocol */
socklen_t ai_addrlen; /* length in bytes of address */
struct sockaddr *ai_addr; /* address */
char *ai_canonname; /* canonical name of host */
struct addrinfo *ai_next; /* next in list */
.
.
.
};
ai_family指定了地址族毁葱,可取值如下:
AF_INET 2 //IPv4
AF_INET6 23 // IPv6
AF_UNSPEC 0 // 協(xié)議無關(guān)
ai_socktype指定我套接字的類型
SOCK_STREAM 1 // 流
SOCK_DGRAM 2 //數(shù)據(jù)報(bào)
freeaddrinfo
void freeaddrinfo( struct addrinfo *ai );
ai參數(shù)應(yīng)指向由getaddrinfo返回的第一個(gè)addrinfo結(jié)構(gòu)。這個(gè)連表中的所有結(jié)構(gòu)以及它們指向的任何動(dòng)態(tài)存儲(chǔ)空間都被釋放掉贰剥。