关于socket 编程的一些函数
getaddrinfo
据传说包含头文件 #include <netdb.h>中
getaddrinfo函数允许将一个主机名字和服务名字映射到一个地址。
由getaddrinfo返回的所有存储空间都是动态获取的,这些存储空间必须通过调用freeaddrinfo返回给系统。
- 函数原型
int getaddrinfo( const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **result );
-
参数说明
- hostname
一个主机名或者地址串(IPv4的点分十进制串或者IPv6的16进制串) - service
服务名可以是十进制的端口号,也可以是已定义的服务名称,如ftp、http等 - hints
可以是一个空指针,也可以是一个指向某个addrinfo结构体的指针,调用者在这个结构中填入关于期望返回的信息类型的暗示。 - result
本函数通过result指针参数返回一个指向addrinfo结构体链表的指针。
- hostname
-
返回值:0——成功,非0——出错
-
addrinfo结构
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 // 协议无关
ai_socktype指定我套接字的类型
SOCK_STREAM 1 // 流
SOCK_DGRAM 2 //数据报
freeaddrinfo
void freeaddrinfo( struct addrinfo *ai );
ai参数应指向由getaddrinfo返回的第一个addrinfo结构。这个连表中的所有结构以及它们指向的任何动态存储空间都被释放掉。
网友评论