Unix中套接字地址结构剖析

IPv4套接字结构

#include <unp.h>
//#define SA struct sockaddr 
struct in_addr
{
    in_addr_t       s_addr;     //32位IPV4地址(4字节)      
};

struct sockaddr_in
{
    unit_8          sin_len;    //整个结构的长度16字节(1字节)
    sa_family_t     sin_family; //地址家族(有长度字段1字节,无长度字段2字节)
    in_port_t       sin_port;   //端口号(2字节)
    struct in_addr  sin_addr;   //32位IPV4地址(4字节)
    char            sin_zero[8];//不用的字段(8字节)

};

通用套接字地址结构

#include <unp.h>
struct sockaddr
{
    uint8_t         sa_len;     
    sa_family_t     sa_family;
    char            sa_data[14];
};

使用套接字函数时通常需要把套接字结构地址转换成指向通用套接字地址结构地址的指针

struct sockaddr_in  serv;

bind(sockfd, (sockaddr *) &serv, sizeof(serv));

IPv6套接字结构

#include <unp.h>
struct in6_addr
{
    uint8_t         s6_addr[16];    //128位IPV6地址(16字节)

}

struct sockaddr_in6
{
    uint8_t         sin6_len;       //整个结构的长度28字节(1字节)
    sa_family_t     sin6_family;
    in_port_t       sin6_port;

    uint32_t        sin6_flowinfo;  //32位流标(4字节)
    struct in6_addr sin6_addr;      //128位IPV6地址(16字节)

    uint32_t        sin6_scope_id   //32位id范围
};

新的通用套接字地址结构

struct sockaddr_storage
{
    uint8_t         ss_len;
    ss_family_t     ss_family;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值