zoukankan      html  css  js  c++  java
  • 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 *类型。

  • 相关阅读:
    第十七讲:解释器模式
    第十六讲:适配器模式
    第十五讲:桥接模式
    第十四讲:组合模式
    第十三讲:外观模式
    第十二讲:代理模式
    第十一讲:享元模式
    第九讲:策略模式
    工厂模式
    观察者设计模式
  • 原文地址:https://www.cnblogs.com/san-fu-su/p/5751302.html
Copyright © 2011-2022 走看看