内核基于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 !=

木木云35元/月,美国vps服务器优惠,1核1G/500M带宽/1T硬盘/4T流量

木木云怎么样?木木云品牌成立于18年,此为贵州木木云科技有限公司旗下新运营高端的服务器的平台,目前已上线美国中部大盘鸡,母鸡采用E5-267X系列,硬盘全部组成阵列。目前,木木云美国vps进行了优惠促销,1核1G/500M带宽/1T硬盘/4T流量,仅35元/月。点击进入:木木云官方网站地址木木云优惠码:提供了一个您专用的优惠码: yuntue目前我们有如下产品套餐:DV型 1H 1G 500M带宽...

香港云服务器 1核 1G 29元/月 快云科技

快云科技: 12.12特惠推出全场VPS 7折购 续费同价 年付仅不到五折公司介绍:快云科技是成立于2020年的新进主机商,持有IDC/ICP等证件资质齐全主营产品有:香港弹性云服务器,美国vps和日本vps,香港物理机,国内高防物理机以及美国日本高防物理机产品特色:全配置均20M带宽,架构采用KVM虚拟化技术,全盘SSD硬盘,RAID10阵列, 国内回程三网CN2 GIA,平均延迟50ms以下。...

蓝速数据(58/年)秒杀服务器独立1核2G 1M

蓝速数据金秋上云季2G58/年怎么样?蓝速数据物理机拼团0元购劲爆?蓝速数据服务器秒杀爆产品好不好?蓝速数据是广州五联科技信息有限公司旗下品牌云计算平台、采用国内首选Zkeys公有云建设多种开通方式、具有IDC、ISP从业资格证IDC运营商新老用户值得信赖的商家。我司主要从事内地的枣庄、宿迁、深圳、绍兴、成都(市、县)。待开放地区:北京、广州、十堰、西安、镇江(市、县)。等地区数据中心业务,均KV...

chrome ie内核为你推荐
电脑杀毒软件哪个好电脑杀毒软件那个最好??录音软件哪个好什么录音软件最好用播放器哪个好播放器哪个好用qq空间登录界面强行进入别人qq空间360云盘登陆怎样登陆360我的云盘360云盘同步版360云盘和360云盘同步版有甚么区分同步版占用电脑空间?360云存储360云盘最高多少内存360云盘企业版360云盘企业版网页打开的 怎么不能编辑?360云盘怎么用360云盘怎么用最好强生月抛强生月抛隐形眼镜的价格是多少
仿牌空间 cpanel idc测评网 ibox官网 softbank邮箱 域名和空间 免费dns解析 上海服务器 优酷黄金会员账号共享 国外在线代理服务器 cdn服务 免费主页空间 alexa世界排名 标准机柜 e-mail 免费服务器 西安电信测速网 免费网络电视直播 护卫神主机管理系统 qq空间申请关闭 更多