内核基于netlink的内核态与用户态异步并发消息处理模型

chrome ie内核  时间:2021-01-25  阅读:()

基于 tlink的内核态与用户态异步并发消息处理模型

用户态采用sl c模型初始化时建立多个  linksocket,绑定完成之后,向内核发送握手消息,这样内核可以将已经建立的连接记住,以便后续选择可用的连接发送数据。初始化和握手完成之后,由内核主动向用户态发送数据,用户态主线程在各个so cet句柄上面等待读事件的到来,当检测到读事件时,向线程池提交数据读取和处理任务。这样模拟一个连接池和事件分发模型,保证内核数据及时被读取到用户态程序并处理,能做到并发。

而内核态的etlink在接收数据时本身就是以系统调用的方式提供给业务层的发送接口,因此本身就是异步的,性能不是问题。内核态收到数据时,只需要提交给一个内核线程去处理即可。

原型代码如下:共用头文件

#dfneE TLINK_TET  

#efineAX_D AA_LEN(76  #defn 

AX_PROCSS_COUNT 10#efie MAX_PYL

D1024

d ineAX_PID_CUNT MAX_PROSSCOUN

#dfine MAX_R_DALEN 102deine S

TIC_PEOD 1 24*5 0#e ine MSG_CO

1000#d ine TRE 1用户态

#include

#incl e

nlude

#ncld e

#iclue

#in ude

#iclud

#inlude asm/tpe  .h

#include

#include

  lu de

inc ude

#include "conf.h"struct ndpo it

{unsigned nt pi;

 trct socka r_l s c_add ;stru c  sockadd_nl d  taddr;int ok_f 

st   t mgd mg;

} *endoits=N; nt  is  en_s  (voi);

nt handwitknl(vid)it lose_u er   id);int doslect st uct timeal wai  );

oid* hreadPoc(oid*ed);v  * sendTreadProc(vid*arg);void fluhcount  n ln)void stt  csut(void);vi  tart  dThread oi);

 tat   ntaf =0

 tati  fd_set r  et;

 ta  c strct t evl tout;unsined ch readbffer;sta ic struct time l tno;s  ti   r   timevl oldtimes a ic lon  ccunt =   ptheadmute_tmtex;sta i  long  abtes= 0;stat  c lo  radnum0;static long  endby e  0;int main(in rgc,chr*arg[]

  po    = struc  endpoi  *)mlloc

sizeof(   ruct ndpoint) *AXPD_CNT);reabfer (unsiged har*)mallo c(AX_E_DATA_LEN ; / rate an netlink ocet andbnd.listenuser( if(thred_utex_n t(&mut ,NUL)  =0)

pr ntf   Init mtu err \");r  rn -1 ;

} /  en a han hae msg o thenl. let the knl to  ee       int.

 ndwit l( ; /   eep(6) // art SenThead   ; get  imef y(&oldtime,NUL)tmou .t_sec=1 

m t.tv_usec=0

/ ait or v t fom th knl to d  ach.

h  e (1)

{

o s le ct(tmout);  f(  ab

tes>STATIC_PROID)

{stti   ut );

} //  le (2);

} /close the soc   .

lo _u ser(return 0;

}int lis  en_ser(void)

{int pidont;

 truct edp nt*ed =NULL;

 t uct lmgdr*  hNLL;unsign  int pid =  tpid ); o  idcunt=   pi d unt MAX_PD_CONT i dcut+)

{

  endpoits+ i dont;memst((vo  d* e,   sizef(str t edoin )); d-> ckd =socket(AF_NETLIN,SOC_RW,TLIN_TST);e-id=    +pid unt;i  (0=ed->  d)

{pi = ++ed->pid;

} e d->sr c_ddr.lfamil y

AF_NE TINK;e d->sr c_addr.nl_groups =  ;ed->src_addr.l_p  ed->pid; /

TDO my e th srcddr.nl_i i  alredyin used, te bid w  l eturn a onzr vau .b d(ed->so ckfd, (struc  s kad  )&ed->sr _adr, si o(ed-> r_ddr ;ed->de stdr.l_fm y AFE TINK;e->dest_a r.lp d= 0;ed>dest_dd  l_goups=  ;

/ F ll in the netlink messge pyload /ed>msg.msg_name= (voi *)  ->dest_ddr

ed->m . _namlen s  eof( d>estad  ; printf("  it the  cket%d o p d%d s  ces   l.\n" ed->soc_ded->pid)u l ep(10000);

} retrn 0 }int ha w thknl vo  d{it pdont;st  ct ndpoint*ed=NULs  ruct nlsghdr l NU; or(idcont=0;pi dcount ! AX_P _CTpidcount++)

{

   endoits+ idcount;

d>msg.mg_iovle =1 ;ed>msg.msgiv=mllo (sizef(strutio c )

d->mg.msg_iov->ov_base= mal o(NLMS G_SPAE MAX_PAYLOA));nlh (  truct nlms gdr*e-m .ms giov->iovas ;

lh->nlmsg_le =LMS_SPA(A_PAY LO AD);nl-nl mg_p  =e d->pi;

lh->nlms g_flag 0;e->g.msg_ ov->iov_ln=nlh->nlmsg_ en;

snprintf( chr)NM S_T(lh ,MAX_PAYO AD 1, "ell kl! Thi  i s%d!"ed->pid);   printf "  ning messaero.  . .\n", d>pi  ;se msg(ed>sok_f,&ed->ms,0); f (e>soc_d>mxfd)

{

xfde-sock_d;

} F D_SE T ed->oc_fd &set);//  hrea_t  i

   f(0 =pthr ea dcrae(&ti,NLL &th aProc, (void*)    )

// {

// rint("cre ate  thrad % successfl or th  d: %. n",  id,ed->pid);

// 

 e urn  ;

}in l  e_user vid

nt picout; for(idcount  0;pidot  =MAXP OUN; icont++)

{

 o e(enpoits  id  nt]. ok_f);

} r etr  

 int o e  et(struc   ie   it)

{int picunt;int selcount0;stru  ed it*e d NL;

 trut lmshdr*nlh =NLL;  l cout=se  ct(mxd+1,&  t NLL,NLL, &wai ) if se  count=0)

{ret n 0

}els if sel on   

{printf("se  eted error!\n");re urn-1 

}e  se

{for(p d u  =  ; pid  nt !=

Sharktech云服务器35折年付33美元起,2G内存/40G硬盘/4TB流量/多机房可选

Sharktech又称SK或者鲨鱼机房,是一家主打高防产品的国外商家,成立于2003年,提供的产品包括独立服务器租用、VPS云服务器等,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹等。之前我们经常分享商家提供的独立服务器产品,近期主机商针对云虚拟服务器(CVS)提供优惠码,优惠后XS套餐年付最低仅33.39美元起,支持使用支付宝、PayPal、信用卡等付款方式。下面以XS套餐为例,分享产品配...

Gigsgigscloud($9.8)联通用户优选日本软银VPS

gigsgigsCloud日本东京软银VPS的大带宽配置有100Mbps、150Mbps和200Mbps三种,三网都走软银直连,售价最低9.8美元/月、年付98美元。gigsgigscloud带宽较大延迟低,联通用户的好选择!Gigsgigscloud 日本软银(BBTEC, SoftBank)线路,在速度/延迟/价格方面,是目前联通用户海外VPS的最佳选择,与美国VPS想比,日本软银VPS延迟更...

Sharktech:鲨鱼机房1Gbps无限流量美国服务器;丹佛$49/月起,洛杉矶$59/月起

sharktech怎么样?sharktech鲨鱼机房(Sharktech)我们也叫它SK机房,是一家成立于2003年的老牌国外主机商,提供的产品包括独立服务器租用、VPS主机等,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹等,主打高防产品,独立服务器免费提供60Gbps/48Mpps攻击防御。机房提供1-10Gbps带宽不限流量服务器,最低丹佛/荷兰机房每月49美元起,洛杉矶机房最低59美元...

chrome ie内核为你推荐
租车平台哪个好租车哪个平台好点,都要什么费用?自然吸气和涡轮增压哪个好涡轮增压和自然吸气哪个更适合跑莫代尔和纯棉哪个好莫代尔和纯棉内裤哪个好?华为p40和mate30哪个好mate30和mate30pro哪个比较好?华为p40和mate30哪个好荣耀30pro和华为P40哪个好?少儿英语哪个好少儿英语哪个比较好?绝地求生加速器哪个好绝地求生的加速器哪个好用?手机管家哪个好有哪些人下了手机管家,最好的是哪个?车险哪个好私家车买什么保险好清理手机垃圾软件哪个好清理手机垃圾的软件哪个好
北京主机租用 域名备案只选云聚达 blackfriday godaddy续费优惠码 日志分析软件 godaddy域名转出 NetSpeeder html空间 52测评网 gspeed 合租空间 韩国名字大全 hostloc 亚马逊香港官网 美国在线代理服务器 网站加速软件 德隆中文网 注册阿里云邮箱 购买空间 qq空间打开很慢 更多