• SOCKET 地址


    地址格式:

     函数bind和getsockname使用通用数据类型:struct sockaddr*来指向socket地址。

    #incude <sys/socket.h>
    
    struct sockaddr {
        short int sa_family,
        char sa_data[14]
    }

    sa_family 指的是地址格式,

    sa_data[14] 则是真正的地址内容。地址数据和格式挂钩的,什么样的格式对应什么样的内容。长度也依赖于格式,所以有可能大于14个字节。这里给出的14是任意的。。。。

    以AF_开头的符号名指定了地址格式,而PF_开头的符号名指定了相应的命名空间。

    AF_LOCAL

      LOCAL指明了是本地地址,使用的是本地命名空间(PF_LOCAL)。

    AF_UNIX

      等同于AF_LOCAL。尽管AF_LOCAL被POSIX.1g强制要求,事实上AF_UNIX更具移植性。

    AF_FILE

      AF_LOCAL的另一个近义词

    AF_INET

      指明了地址位于Internet命名空间之下。PF_INET为其命名空间。

    AF_INET6

      与AF_INET相似,特指IPv6协议,命名空间为PF_INET6。

    AF_UNSPEC

      指明不使用特定的地址格式,很少情况下用这种地址格式。命名空间为PF_UNSPEC(只是为了完整性,才整出这么一个命名空间。

    为socket设置地址:

      通过bind函数将地址绑定给某个socket。

    #include <sys/socket.h>
    int bind (int socket, struct sockaddr *addr, socklen_t length)

    读取socket地址:

      使用函数getsockname 来检查Internet socket的地址。

    #include <sys/scoket.h>
    int getsockname (int socket, struct sockaddr *addr, socklen_t *length-ptr)

    地址和地址长度通过*addr和*length-ptr返回。通常来讲,我们针对命名空间使用合适的数据类型申请空间来存放地址,然后将其强制转化为sockaddr *类型。

  • 相关阅读:
    NOIP2015 斗地主
    BZOJ 2120: 数颜色
    BZOJ 1014: [JSOI2008]火星人prefix
    BZOJ 4665: 小w的喜糖
    BZOJ 3665: maths
    BZOJ 3270: 博物馆
    BZOJ 1419: Red is good
    【转】二分图的最大匹配
    POJ 3026 Borg Maze(Prim+BFS建邻接矩阵)
    POJ 2485 Highway(Prim+邻接矩阵)
  • 原文地址:https://www.cnblogs.com/san-fu-su/p/5751302.html
Copyright © 2020-2023  润新知