Linux协议栈之BSD和INET socket层(二)

BSD socket层几个函数的介绍:

sock_alloc()获取一个inode结构,并初始化返回所需socket结构

sock_release_peer()仅用于UNIX域

sock_release()用于释放关闭一个套接字,调用sock_ops_release,sock_ops是一个proto_ops结构,是一个操作函数的集合;

sock_close()call sock_release() call sock_release_peer();

sock_socket(),其中type的判断如下:

SOCK_STREAM:流式数据交换TCP

SOCK_DGRAM:报文数据交换UDP

SOCK_SEQPACKET:序列报文套接字,内核树立方式

SOCK_RAW:原始套接字,直接传输层发送数据,应用程序自行建立传输首部

SOCK_PACKET:包类型套接字,直接网络层发送,应用程序自行建立网络层首部

 

sock_socketpair()只用于UNIX域,应用于两个进程间交换数据,类似于管道;

 

sock_accept()判断SO_ACCEPTCON标志置1,然后调用sock_alloc()分配一个新的套接字,再用sock->ops->dup拷贝监听套接字设置到新的套接字。

 

INET层:

proto数据结构,定义了传输层操作的一些列函数指针和字段,每个传输层协议都对应一个proto字段。对核对于管理proto数据结构,通过一个sock_array[]数组来实现并通过进程通行的端口作为下标插入到此数组中。sock_array有256个元素,每个元素都是一个链表,而端口号范围可以达到65536,其中1024以下保留给系统使用。具体的计算方法是取余:

n%SOCK_ARRAY_SIZE=N

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值