socket網絡編程----addrinfo結構體和getaddrinfo函數介紹


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM