c语言系统库之socket

关于socket 编程的一些函数

getaddrinfo

据传说包含头文件 #include
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结构体链表的指针。
  • 返回值: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结构。这个连表中的所有结构以及它们指向的任何动态存储空间都被释放掉。

参考

  • http://www.cnblogs.com/cxz2009/archive/2010/11/19/1881693.html

  • http://blog.chinaunix.net/uid-26583794-id-3167485.html

你可能感兴趣的:(c语言系统库之socket)