zoukankan      html  css  js  c++  java
  • sockaddr_in & sockaddr

    #define __SOCKADDR_COMMON(sa_prefix) sa_family_t sa_prefix##family

    这个宏用于为套接字地址(socket addresses),如“ struct sockaddr”,“ struct sockaddr_in”等,声明数据类型的公共成员。

    struct sockaddr{
        __SOCKADDR_COMMON (sa_);
        char sa_data[14];
     };

    sockaddr结构体描述通用套接字地址(socket address)的结构,其中宏__SOCKADDR_COMMON (sa_)表示公共数据(Common data)代表地址族和长度(address family and length),char sa_data[14]表示地址数据(Address data)。

    这个结构体用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。但是一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构

    sockaddr_in。
    struct sockaddr_in {
        __SOCKADDR_COMMON (sin_);
        in_port_t sin_port;
        struct in_addr sin_addr;
        unsigned char sin_zero[sizeof (struct sockaddr) - __SOCKADDR_COMMON_SIZE - sizeof (in_port_t) - sizeof (struct in_addr)];
     };        

    sockaddr_in结构体描述Internet套接字地址的结构,其中sin_port代表端口号,注意需要将主机字节序转化为网络字节序,sin_addr表示网络地址,sin_zero表示填充到`struct sockaddr'的大小。

    typedef uint32_t in_addr_t;
    struct in_addr {
        in_addr_t s_addr;
     };

    in_addr结构体表示网络地址,注意需要将主机字节序转化为网络字节序。例如对于IP="127.0.0.1",这里s_addr应该赋值htonl(127*256*256*256+1),即s_addr=htonl(127*256*256*256+1)。

     
  • 相关阅读:
    精通CSS高级Web解决方案(第2版)——读书笔记
    MySQL的知识点总结(一)
    json深拷贝
    Typescript 从Array 继承时碰到的问题
    webpack 笔记
    JavaScript 高效代码
    编写更优雅的 JavaScript 代码
    JavaScript复杂判断优雅写法
    深入浅出Javascript事件循环机制
    关于面向对象封装的思考--持续更新
  • 原文地址:https://www.cnblogs.com/iuyy/p/13381021.html
Copyright © 2011-2022 走看看