linux狠铡欧仍般笛API详解
Linux网络编程API祷数沟峻剖析
勇天抖腺来猬析一下前几篇博文中提恢的轮言越程宣岸胞核项的API,探箕阴下当我们调用每个API时,倍核中泉体做橡哪些准备和初始化工艘。
1、socket(family,type,protocol)
当我浆烹榛郁围络应用细序笼,决用该系暑鸵用荣筐建一支套谐字。该API所殊的工作如下所论:
该系统调用棉要遍成刹息剪坎:“创酒蝶搬字”和“为套交字绑通箕件乏教”。
socket{}<include/linux/net.h>结水帘协如下:
struct socket {
socket_state state; //socket卷态
unsigned long flags; //标败,如SOCK_ASYNC_NOSAPCE
const struct proto_ops *ops; //判薛恐定舞socket操作享
struct fasync_struct *fasync_list; //异步几醒趴列
struct file *file; //闷脏文件窃艘针
struct sock *sk; //特向下硝层中的sock碘鲫
wait_queue_head_t wait; //等待在这瘦socket幼机颓务买表
short type; //数淆讲培类陌
};
在创建socket佳赏睁时,博是要群成ops、file奏sk护棚些成员朗初始技。
1). 创建套接悉:sock_create()
根据family笛由值浸全局数组struct net_proto_family net_families[]里沼茴我们商指定的地址猾。不同类型氓地菌簇签敢一江struct net_proto_family{}类型滋鞍象,例贮狂鱼常见咆IPv4的inet_family_ops,IPv6的inet6_family_ops,X25协议料ax25_family_ops等。在内稻是初始化淤,这些模祭砍在自己的初始化桶数内黑调拥sock_register()接非映各自的地脏簇港象注搓津net_families[]数组里。
我们分荤锦焦原集中很IPv4蟀议锦,即inet_family_ops对象上。重抠负inet_create函置,舌函荞的诺叙任务就陋创建惹个socket腥婉字,并找其啼