Linux 网络编程 套接字结构

本文详细介绍了IPv4和IPv6环境下套接字的结构及其使用方式,包括bind、connect等函数如何操作这些结构,并探讨了不同版本间的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IPV4 套接子结构

struct sockaddr_in{

uint8_t         sin_len;          //套接字长度,后来加入的参数,为了支持兼容和确定长度

sa_family_t  sin_family;      //协议类型

in_port_t       sin_port;        //端口号   16位

struct     in_addr     sin_addr;   //地址  32位

char   sin_zero[8];              //未使用

};

struct  in_addr  {

in_addr_t    s_addr;     //32位地址

};

POSIX 规范只需要这个结构中的三个,family  ,addr ,port, 对与这个规范来说,这个大小是可以接受的,现在很多网际协议套接字大小至少都有16字节.

但是后来一个通用的结构出现了:

struct  sockaddr {

uint8_t   sa_len;

sa_family_t sa_family ;

char  sa_data[14];

};

所以后来的bind  需要强制转换参数类型,仅仅因为如此罢了。

ipv6 的 结构:

struct in6_addr {

unit8_t s6_addr[16];

};

struct sockaddr_in6 {

uint8_t      sin6_len;

sa_family_t  sin6_family;

in_port_t       sin6_port;

uint32_t        sin6_addr;

uint32_t        sin6_scope_id;

};

套接字的传递:

从进程到内核传递套接字地址结构的函数有3个,bind ,connect,sendto.

从内核到进程传递套接字地址结构的函数一共有4个,accept,recvfrom,getsockname,getpeername.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值