socket

socket地址:是一个IP地址和端口对(ipport),唯一的表示了使用TCP通信的一端。

通用socket地址:

表示socket地址的结构体:

#include

struct sockadddr

{

  sa_family_t  sa_family;

  char sa_data[14];

};

sa_family是地址族类型的变量。地址族类型通常与协议族类型相对应。

 Linux网络编程基础之socket

sa_data成员用于存放socket地址值。但是,不同的协议族的地址值具有不同的含义和长度。

Linux网络编程基础之socket

 由上图可见14字节的sa_data根本无法完全容纳多数协议族的地址值。因此,Linux定义了下面这个新的通用socket地址结构体:

#include  

struct  sockaddr_storage

{

   sa_family_t  sa_family;

   unsigned  long int  _ss_align;

char  _ss_padding[128-sizeof(_ss_align)];  

};

这个结构体不仅提供了足够大的空间用于存放地址值,而且是内存对齐的,这是第二个成员的作用。 

专用socket地址:

UNIX本地域协议族使用如下专用socket地址结构体:

#include

struct sockaddr_un

{

     sa_family_t     sin_family;

    char sun_path[108];

};

TCP/IP协议族有sockaddr_in和sockaddr_in6两个专用socket地址结构体,它们分别用于IPv4heIPv6:

struct sockaddr_in

{  

     sa_family_t  sin_family;

    u_int16_t   sin_port;

    struct in_addr  sin_addr;

};

struct  in_addr

{

    u_int32_t    s_addr;

};

struct sockaddr_in6

{  

     sa_family_t  sin6_family;

    u_int16_t   sin6_port;

    u_int32_t  sin6_flowinfo;

    struct in6_addr  sin6_addr;

    u_int32_t  sin6_scope_id;

};

struct  in6_addr

{

    u_int32_t    s_addr;

};




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值