亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rn.html

?? linux平臺epoll封裝
?? HTML
字號:
<html><head><title>Using rn</title></head><body><h1><a name=top>rn</a></h1>rn provides a more or less convenient wrapper aroundtwo very efficient notification mechanisms, sigio and epoll.See <a href="http://www.kegel.com/c10k.html">www.kegel.com/c10k.html</a>for a description of thesetwo mechanisms.  Basically, they are standard Linux replacementsfor poll that are much more efficient.The right one to use is almost always epoll; sigio is only a fallback,as it's less efficient.<p>The odd thing about rn is that you have to tell it the maximumnumber of file descriptors you expect to have to use,and (if you want to work with sigio) you have to tell itwhich realtime signal to use to deliver its notifications.<p>The epoll library must be installed before you can build rn.<h2><a name=use>Using rn</a></h2>The api is fairly simple; see <a href="rn_test.c">rn_test.c</a> for an example.<p>Here are the steps to add rn support to a program currently using poll():<ul><li>In source code that currently uses poll(), add the line<pre>#include &lt;rn.h&gt;</pre>to get access to rn.<li> Link your program with -lrn.  You *might* also have to link with -lepoll,but not if you're using glibc-2.3.2 or later.<li> In main(), or somewhere near startup, create an object of type rn_t, and call rn_init() and rn_setSignum() on it.  e.g.<pre>rn_t rns;if (rn_init(&rns, 128)) {	printf("FAIL: rn_init failed \n");	exit(1);}if (rn_setSignum(&rns, SIGRTMIN)) {	printf("FAIL: rn_setSignum failed \n");	exit(1);}</pre>The second argument to rn_init() should be the highest file descriptoryou expect to ever see in your program, or roughly the numberof sockets you expect to have open at any one time.<p>The second argument to rn_setSignum() is the realtime signal rn should useinternally.  Usually SIGRTMIN is fine.<li> Whenever you create a socket fd, add it to the rn as follows:<pre>err = rn_prepare_fd_for_add(fd, getpid());if (err) {	printf("FAIL: rn_prepare_fd_for_add failed, errno %d\n", err);	exit(1);}err = rn_add(&rns, fd, my_callback, NULL);if (err) {	printf("FAIL: rn_add failed, errno %d\n", err);	exit(1);}</pre>The third argument to rn_add() is your readiness event handler function; it is calledwhenever that socket becomes ready for I/O.The fourth argument to rn_add() is for your use; it is a context pointer that will bepassed back when your readiness event handler is called.  You can use it to holda pointer to the object associated with that socket.  (If there is demand,I may add a C++ wrapper for rn so C++ programmers could simply give an objectpointer here, and inherit from class rnClient, then override its virtualreadiness event handler method.)<li> Whenever you close a socket fd, remove it from the rn as follows:<pre>rn_del(&fns, fd);</pre><li> Replace the call to poll() in your program with a call to rn_waitAndDispatchEvents():<pre>rn_waitAndDispatchEvents(&rns, timeout_milliseconds);</pre>The second argument to rn_waitAndDispatchEvents is the timeout inmilliseconds; the call will sleep until some sockets areready for I/O, but no longer than timeout_milliseconds.<li> Replace the code after poll() that looks at the ready fd array with an event handler callback function.  Basically, rn_waitAndDispatchEvents willlook at the ready fd array for you, and call the event handler functionyou specified in rn_add() whenever the socket you specified in rn_add() becomesready for something.<li> (The hardest part of all:) never, ever return from your event handler functionwithout either "using up" the readiness status of the socket, or storing it forlater action.  In the simplest case of reading from a socket, you must continuecalling read() on the socket until read() returns a partial buffer or returns-1 and sets errno to EWOULDBLOCK.  (Or until you close the socket.)If you fail to read all the bytes waiting to be read, your event handlermight never be called again, and your state machine will jam.</ul><p><h2><a name=test>Unit test</a></h2>The rn library comes with a test program which doubles as a demo.The test program is unfortunately not standalone -- it relies onthe 'chargen' tcp server, which you may have to enable by editing /etc/inetd.conf, then restarting inetd.<p>Here's what a successful run looks like:<pre># ./rn_testfn: revents 4rn_POLLOUTfn: revents 5fn: read returns 1024, errno 11... (repeats 62 times)fn: read returns 1024, errno 11fn: read returns 977, errno 11Read 66513 bytesPASS</pre>If you're debugging a program that uses rn, you may wish to rebuildrn with dprints enabled.  To do this, uncomment the lines<pre>/* #define dprint_ENABLED *//* #define dprint_TRACE_ENABLED */</pre>in rn_dprint.h, and rebuild and reinstall rn.With dprint enabled, a successful run looks like this:<pre># ./rn_test-469985671:47:rn_sys_epoll.c:rn_sys_epoll_init  init()-469985652:150:rn_sys_epoll.c:rn_sys_epoll_add  add(4, 0x10000954, (nil)) this->m_fds_used 1-469985651:198:rn_sys_epoll.c:rn_sys_epoll_waitAndDispatchEvents        Calling epoll...-469985651:200:rn_sys_epoll.c:rn_sys_epoll_waitAndDispatchEvents        epoll returns 1 fds. errno: 11-469985651:213:rn_sys_epoll.c:rn_sys_epoll_waitAndDispatchEvents        fd 4, revents 4fn: revents 4rn_POLLOUT-469985651:198:rn_sys_epoll.c:rn_sys_epoll_waitAndDispatchEvents        Calling epoll...-469985638:200:rn_sys_epoll.c:rn_sys_epoll_waitAndDispatchEvents        epoll returns 1 fds. errno: 11-469985638:213:rn_sys_epoll.c:rn_sys_epoll_waitAndDispatchEvents        fd 4, revents 5fn: revents 5fn: read returns 1024, errno 11... (62 lines like the one above)fn: read returns 1024, errno 11fn: read returns 118, errno 11Read 65654 bytes-469985628:160:rn_sys_epoll.c:rn_sys_epoll_del  del(fd 4)PASS</pre><hr><i>Last change: 10 Nov 2003<br>Portions Copyright 2002 Dan Kegel<br>Portions Copyright 2003 Ixia Communications<br>Licensed under the LGPL<br>[<a href="http://www.kegel.com/rn/">Return to kegel.com/rn</a>]</i></body></html>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色哟哟日韩精品| 久久久青草青青国产亚洲免观| 884aa四虎影成人精品一区| www激情久久| 同产精品九九九| 不卡免费追剧大全电视剧网站| 欧美疯狂做受xxxx富婆| 中文字幕av一区二区三区免费看| 午夜欧美在线一二页| 成人动漫精品一区二区| 日韩欧美一区二区久久婷婷| 伊人性伊人情综合网| 国产白丝精品91爽爽久久| 91麻豆精品国产91久久久久久 | 日韩美女一区二区三区四区| 国产精品美女久久久久久久久| 国产激情视频一区二区在线观看 | 久久久精品人体av艺术| 偷窥国产亚洲免费视频| 一本大道综合伊人精品热热| 欧美经典三级视频一区二区三区| 日韩不卡一二三区| 欧美日韩中文字幕一区二区| **性色生活片久久毛片| 国产一区二区三区国产| 精品日本一线二线三线不卡| 日韩电影免费在线观看网站| 欧美日韩视频不卡| 亚洲国产精品人人做人人爽| 日本乱人伦一区| 亚洲欧美日本韩国| 日本高清不卡视频| 亚洲激情图片小说视频| 色视频成人在线观看免| 亚洲日本在线观看| 色狠狠一区二区| 一卡二卡欧美日韩| 欧美亚洲免费在线一区| 日韩综合在线视频| 日韩欧美一级二级| 国产一区二区三区视频在线播放| 久久久欧美精品sm网站| 国产成人免费xxxxxxxx| 国产精品美女久久久久久久网站| jlzzjlzz亚洲女人18| 亚洲天堂福利av| 欧美三级一区二区| 日韩成人免费看| 国产三级精品三级| 91免费版pro下载短视频| 亚洲国产wwwccc36天堂| 欧美一区二视频| 国产精品系列在线观看| 亚洲欧美自拍偷拍色图| 国产欧美日韩另类视频免费观看| 国产成人在线免费| 亚洲日本韩国一区| 69久久夜色精品国产69蝌蚪网| 青青草精品视频| 国产欧美一区视频| 色欧美88888久久久久久影院| 亚洲国产精品久久艾草纯爱| 日韩欧美精品在线| 99精品视频免费在线观看| 亚洲gay无套男同| 久久久精品日韩欧美| 色综合久久综合| 日韩精品1区2区3区| 国产三级精品三级在线专区| 欧洲av在线精品| 激情综合五月婷婷| 亚洲在线成人精品| 26uuu欧美| 欧美私人免费视频| 国产高清成人在线| 香港成人在线视频| 国产精品视频观看| 日韩一区二区免费在线观看| 国产成人免费视频一区| 无码av中文一区二区三区桃花岛| 国产免费观看久久| 日韩欧美国产系列| 欧美最猛黑人xxxxx猛交| 国产一区二区三区av电影| 亚洲国产综合视频在线观看| 国产视频亚洲色图| 日韩三级伦理片妻子的秘密按摩| av影院午夜一区| 国产真实乱偷精品视频免| 亚洲综合视频在线| 国产精品福利一区二区| 精品国产乱码久久久久久老虎| 91免费观看视频在线| 国产sm精品调教视频网站| 日本va欧美va欧美va精品| 亚洲激情综合网| 欧美国产日韩a欧美在线观看| 日韩欧美美女一区二区三区| 精品视频全国免费看| 色欲综合视频天天天| 成人爽a毛片一区二区免费| 极品少妇xxxx精品少妇| 日韩成人午夜精品| 视频一区免费在线观看| 一区二区三区四区不卡视频| 中文字幕欧美一| 国产精品欧美综合在线| 久久久欧美精品sm网站| 久久久久久久久久久久久久久99| 日韩一区二区三区高清免费看看| 欧美丝袜丝nylons| 欧美午夜理伦三级在线观看| 一本一本久久a久久精品综合麻豆| 粉嫩aⅴ一区二区三区四区五区| 国产一区二区三区在线看麻豆| 美国十次综合导航| 麻豆精品久久精品色综合| 青青草成人在线观看| 免费观看30秒视频久久| 免费看精品久久片| 激情小说欧美图片| 国产伦精品一区二区三区视频青涩 | 亚洲欧洲国产日韩| 国产精品传媒在线| 亚洲美女屁股眼交| 亚洲一区二区在线观看视频 | 久久在线免费观看| 久久久www免费人成精品| 国产亚洲成av人在线观看导航| 久久视频一区二区| 国产三级精品三级在线专区| 国产精品青草久久| 亚洲一区二区三区国产| 日本美女一区二区| 国产精品88888| 波多野结衣在线一区| 91网站在线播放| 欧美伦理视频网站| 久久精品人人做人人爽人人| 国产精品理论片在线观看| 亚洲制服欧美中文字幕中文字幕| 日日摸夜夜添夜夜添精品视频 | 成熟亚洲日本毛茸茸凸凹| av不卡免费电影| 制服丝袜中文字幕一区| 亚洲精品在线电影| 亚洲日本免费电影| 国产成人午夜片在线观看高清观看| 成人爽a毛片一区二区免费| 91电影在线观看| 久久久精品免费网站| 亚洲猫色日本管| 久久精品99国产精品| av一二三不卡影片| 日韩一区二区电影在线| 国产精品美女视频| 久久精品免费观看| 色综合天天做天天爱| 日韩一级大片在线观看| 亚洲天堂av一区| 久久精品国内一区二区三区| 波多野结衣一区二区三区| 欧美高清视频www夜色资源网| 国产日韩综合av| 日韩av中文字幕一区二区| va亚洲va日韩不卡在线观看| 日韩一区二区三区在线视频| 中文字幕一区免费在线观看| 免费成人你懂的| 欧洲av一区二区嗯嗯嗯啊| 国产三级精品三级在线专区| 日韩精品国产精品| 色噜噜狠狠成人网p站| 久久免费精品国产久精品久久久久| 亚洲国产三级在线| hitomi一区二区三区精品| 欧美一级日韩一级| 亚洲国产综合色| 91国产精品成人| 亚洲欧美自拍偷拍色图| 懂色av一区二区三区免费观看| 日韩一区二区精品在线观看| 一区二区三区在线观看国产| 成人激情图片网| 久久久精品国产免大香伊| 蜜桃传媒麻豆第一区在线观看| 色久优优欧美色久优优| 亚洲欧美在线视频观看| 国内精品久久久久影院色| 欧美一级午夜免费电影| 日韩精品电影一区亚洲| 欧美精品国产精品| 亚洲一区二区三区四区在线| av高清不卡在线| 国产精品美女久久久久久久网站| 国产美女一区二区三区| 久久久亚洲午夜电影| 国产一区二区三区四区五区入口 | 天堂一区二区在线| 欧美日韩在线亚洲一区蜜芽|