1 socket網絡編程—addrinfo結構體定義:
1 struct addrinfo { 2 3 int ai_flags; /* customize behavior */ 4 5 int ai_family; /* address family */ 6 7 int ai_socktype; /* socket type */ 8 9 int ai_protocol; /* protocol */ 10 11 socklen_t ai_addrlen; /* length in bytes of address */ 12 13 struct sockaddr *ai_addr; /* address */ 14 15 char *ai_canonname; /* canonical name of host */ 16 17 struct addrinfo *ai_next; /* next in list */ 18 19 ......20 };
其中主要參數:
ai_family指定了地址族,可取值如下:
AF_INET 2 IPv4
AF_INET6 23 IPv6
AF_UNSPEC 0 協議無關
ai_socktype指定我套接字的類型
SOCK_STREAM 1 流
SOCK_DGRAM 2 數據報
在AF_INET通信域中套接字類型SOCK_STREAM的默認協議是TCP(傳輸控制協議)
在AF_INET通信域中套接字類型SOCK_DGRAM的默認協議是UDP(用戶數據報協議)
2 getaddrinfo函數介紹
getaddrinfo解決了把主機名和服務名轉換成套接口地址結構的問題。POSIX中的函數原型:
#include<netdb.h>
int getaddrinfo( const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **result );
返回0: 成功
返回非0: 出錯
其中相關參數:
hostname:一個主機名或者地址串(IPv4的點分十進制串或者IPv6的16進制串)
service:一個服務名或者10進制端口號數串。
hints: 可以是一個空指針,也可以是一個指向某個addrinfo結構的指針,調用者在這個結構中填入關於期望返回的信息類型的暗示。舉例來說:如果指定的服務既 支持TCP也支持UDP,那么調用者可以把hints結構中的ai_socktype成員設置成SOCK_DGRAM使得返回的僅僅是適用於數據報套接口的信息。
result指針參數返回一個指向addrinfo結構鏈表的指針
http://blog.chinaunix.net/uid-26583794-id-3167485.html