美文网首页
c语言系统库之socket

c语言系统库之socket

作者: xuanskyer | 来源:发表于2017-04-19 00:18 被阅读0次

    关于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结构体链表的指针。
    • 返回值: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结构。这个连表中的所有结构以及它们指向的任何动态存储空间都被释放掉。

    参考

    相关文章

      网友评论

          本文标题:c语言系统库之socket

          本文链接:https://www.haomeiwen.com/subject/hpxczttx.html