日期:2014-05-16 浏览次数:20764 次
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