锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产婷婷精品,久久岛国电影,精品动漫avhttp://m.shnenglu.com/Panda/category/11683.htmlzh-cnWed, 13 Jan 2010 10:48:04 GMTWed, 13 Jan 2010 10:48:04 GMT60椋為附鍗忚浠ュ強鍏朵嬌鐢ㄧ殑UDP鏁版嵁鍖呮牸寮忓拰鏂囦歡浼犺緭閫昏緫http://m.shnenglu.com/Panda/archive/2010/01/11/105406.htmlChinaPandaChinaPandaMon, 11 Jan 2010 07:23:00 GMThttp://m.shnenglu.com/Panda/archive/2010/01/11/105406.htmlhttp://m.shnenglu.com/Panda/comments/105406.htmlhttp://m.shnenglu.com/Panda/archive/2010/01/11/105406.html#Feedback0http://m.shnenglu.com/Panda/comments/commentRss/105406.htmlhttp://m.shnenglu.com/Panda/services/trackbacks/105406.html闃呰鍏ㄦ枃

]]>
ACE about serverhttp://m.shnenglu.com/Panda/archive/2009/12/23/103803.htmlChinaPandaChinaPandaWed, 23 Dec 2009 07:59:00 GMThttp://m.shnenglu.com/Panda/archive/2009/12/23/103803.htmlhttp://m.shnenglu.com/Panda/comments/103803.htmlhttp://m.shnenglu.com/Panda/archive/2009/12/23/103803.html#Feedback0http://m.shnenglu.com/Panda/comments/commentRss/103803.htmlhttp://m.shnenglu.com/Panda/services/trackbacks/103803.html闃呰鍏ㄦ枃

]]>
椋為附鏂囦歡緇撴瀯鍒嗘瀽http://m.shnenglu.com/Panda/archive/2009/09/08/95627.htmlChinaPandaChinaPandaTue, 08 Sep 2009 15:21:00 GMThttp://m.shnenglu.com/Panda/archive/2009/09/08/95627.htmlhttp://m.shnenglu.com/Panda/comments/95627.htmlhttp://m.shnenglu.com/Panda/archive/2009/09/08/95627.html#Feedback0http://m.shnenglu.com/Panda/comments/commentRss/95627.htmlhttp://m.shnenglu.com/Panda/services/trackbacks/95627.html闃呰鍏ㄦ枃

]]>
Windows瀹屾垚绔彛涓嶭inux epoll鎶鏈畝浠?/title><link>http://m.shnenglu.com/Panda/archive/2009/09/06/95436.html</link><dc:creator>ChinaPanda</dc:creator><author>ChinaPanda</author><pubDate>Sun, 06 Sep 2009 14:23:00 GMT</pubDate><guid>http://m.shnenglu.com/Panda/archive/2009/09/06/95436.html</guid><wfw:comment>http://m.shnenglu.com/Panda/comments/95436.html</wfw:comment><comments>http://m.shnenglu.com/Panda/archive/2009/09/06/95436.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Panda/comments/commentRss/95436.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Panda/services/trackbacks/95436.html</trackback:ping><description><![CDATA[<p><strong>WINDOWS瀹屾垚绔彛緙栫▼<br></strong>1銆佸熀鏈蹇?br>2銆乄INDOWS瀹屾垚绔彛鐨勭壒鐐?br>3銆佸畬鎴愮鍙o紙Completion Ports 錛夌浉鍏蟲暟鎹粨鏋勫拰鍒涘緩<br>4銆佸畬鎴愮鍙g嚎紼嬬殑宸ヤ綔鍘熺悊<br>5銆乄indows瀹屾垚绔彛鐨勫疄渚嬩唬鐮?br><strong>Linux鐨凟Poll妯″瀷<br></strong>1銆佷負浠涔坰elect钀藉悗<br>2銆佸唴鏍鎬腑鎻愰珮I(yè)/O鎬ц兘鐨勬柊鏂規(guī)硶epoll<br>3銆乪poll鐨勪紭鐐?br>4銆乪poll鐨勫伐浣滄ā寮?<br>5銆乪poll鐨勪嬌鐢ㄦ柟娉?br>6銆丩inux涓婨POll緙栫▼瀹炰緥<br><strong>鎬葷粨</strong></p> <p><strong>WINDOWS瀹屾垚绔彛緙栫▼<br></strong>        鎽樿錛氬紑鍙戠綉緇滅▼搴忎粠鏉ラ兘涓嶆槸涓浠跺鏄撶殑浜嬫儏錛屽敖綆″彧闇瑕侀伒瀹堝緢灝戠殑涓浜涜鍒?鍒涘緩socket,鍙戣搗榪炴帴錛屾帴鍙楄繛鎺ワ紝鍙戦佸拰鎺ュ彈鏁版嵁銆傜湡姝g殑鍥伴毦鍦ㄤ簬錛? 璁╀綘鐨勭▼搴忓彲浠ラ傚簲浠庡崟鍗曚竴涓繛鎺ュ埌鍑犲崈涓繛鎺ヤ箖鑷充簬涓婁竾涓繛鎺ャ傚埄鐢╓indows騫沖彴瀹屾垚绔彛榪涜閲嶅彔I/O鐨勬妧鏈拰Linux鍦?.6鐗堟湰鐨勫唴鏍鎬腑 寮曞叆鐨凟POll鎶鏈紝鍙互寰堟柟渚垮湪鍦ㄥ湪Windows鍜孡inux騫沖彴涓婂紑鍙戝嚭鏀寔澶ч噺榪炴帴鐨勭綉緇滄湇鍔$▼搴忋傛湰鏂囦粙緇嶅湪Windows鍜孡inux騫沖彴 涓婁嬌鐢ㄧ殑瀹屾垚绔彛鍜孍Poll妯″瀷寮鍙戠殑鍩烘湰鍘熺悊錛屽悓鏃剁粰鍑哄疄闄呯殑渚嬪瓙銆傛湰鏂囦富瑕佸叧娉–/S緇撴瀯鐨勬湇鍔″櫒绔▼搴忥紝鍥犱負涓鑸潵璇達紝寮鍙戜竴涓ぇ瀹歸噺錛屽叿鍙墿灞? 鎬х殑winsock紼嬪簭涓鑸氨鏄寚鏈嶅姟紼嬪簭銆?br><strong><br>1銆佸熀鏈蹇?br></strong>    璁懼---windows鎿嶄綔緋葷粺涓婂厑璁擱氫俊鐨勪換浣曚笢瑗匡紝姣斿鏂囦歡銆佺洰褰曘佷覆琛屽彛銆佸茍琛屽彛銆侀偖浠舵Ы銆佸懡鍚嶇閬撱佹棤鍚嶇閬撱佸鎺ュ瓧銆佹帶鍒跺彴銆侀昏緫紓佺洏銆佺墿鐞? 紓佺洏絳夈傜粷澶у鏁頒笌璁懼鎵撲氦閬撶殑鍑芥暟閮芥槸CreateFile/ReadFile/WriteFile絳夈傛墍浠ユ垜浠笉鑳界湅鍒?*File鍑芥暟灝卞彧鎯沖埌鏂囦歡 璁懼銆備笌璁懼閫氫俊鏈変袱縐嶆柟寮忥紝鍚屾鏂瑰紡鍜屽紓姝ユ柟寮忋傚悓姝ユ柟寮忎笅錛屽綋璋冪敤ReadFile鍑芥暟鏃訛紝鍑芥暟浼氱瓑寰呯郴緇熸墽琛屽畬鎵瑕佹眰鐨勫伐浣滐紝鐒跺悗鎵嶈繑鍥烇紱寮傛鏂瑰紡 涓嬶紝ReadFile榪欑被鍑芥暟浼氱洿鎺ヨ繑鍥烇紝緋葷粺鑷繁鍘誨畬鎴愬璁懼鐨勬搷浣滐紝鐒跺悗浠ユ煇縐嶆柟寮忛氱煡瀹屾垚鎿嶄綔銆?br>閲嶅彔I/O----欏懼悕鎬濅箟錛屽綋浣犺皟鐢ㄤ簡鏌? 涓嚱鏁幫紙姣斿ReadFile錛夊氨绔嬪埢榪斿洖鍋氳嚜宸辯殑鍏朵粬鍔ㄤ綔鐨勬椂鍊欙紝鍚屾椂緋葷粺涔熷湪瀵笽/0璁懼榪涜浣犺姹傜殑鎿嶄綔錛屽湪榪欐鏃墮棿鍐呬綘鐨勭▼搴忓拰緋葷粺鐨勫唴閮ㄥ姩浣滄槸 閲嶅彔鐨勶紝鍥犳鏈夋洿濂界殑鎬ц兘銆傛墍浠ワ紝閲嶅彔I/O鏄敤浜庡紓姝ユ柟寮忎笅浣跨敤I/O璁懼鐨勩?閲嶅彔I/O闇瑕佷嬌鐢ㄧ殑涓涓潪甯擱噸瑕佺殑鏁版嵁緇撴瀯OVERLAPPED銆?br><strong><br>2銆乄INDOWS瀹屾垚绔彛鐨勭壒鐐?br></strong>   Win32閲嶅彔I/O(Overlapped I/O)鏈哄埗鍏佽鍙戣搗涓涓搷浣滐紝鐒跺悗鍦ㄦ搷浣滃畬鎴愪箣鍚庢帴鍙楀埌淇℃伅銆傚浜庨偅縐嶉渶瑕佸緢闀挎椂闂存墠鑳藉畬鎴愮殑鎿嶄綔鏉ヨ錛岄噸鍙營O鏈哄埗灝ゅ叾鏈夌敤錛屽洜涓哄彂璧烽噸鍙犳搷浣滅殑綰跨▼ 鍦ㄩ噸鍙犺姹傚彂鍑哄悗灝卞彲浠ヨ嚜鐢辯殑鍋氬埆鐨勪簨鎯呬簡銆傚湪WinNT鍜學in2000涓婏紝鎻愪緵鐨勭湡姝g殑鍙墿灞曠殑I/O妯″瀷灝辨槸浣跨敤瀹屾垚绔彛錛圕ompletion Port錛夌殑閲嶅彔I/O.瀹屾垚绔彛---鏄竴縐峎INDOWS鍐呮牳瀵硅薄銆傚畬鎴愮鍙g敤浜庡紓姝ユ柟寮忕殑閲嶅彔I/0鎯呭喌涓嬶紝褰撶劧閲嶅彔I/O涓嶄竴瀹氶潪浣跨敤瀹屾垚绔彛涓? 鍙紝榪樻湁璁懼鍐呮牳瀵硅薄銆佷簨浠跺璞°佸憡璀/0絳夈備絾鏄畬鎴愮鍙e唴閮ㄦ彁渚涗簡綰跨▼姹犵殑綆$悊錛屽彲浠ラ伩鍏嶅弽澶嶅垱寤虹嚎紼嬬殑寮閿錛屽悓鏃跺彲浠ユ牴鎹瓹PU鐨勪釜鏁扮伒媧葷殑鍐沖畾 綰跨▼涓暟錛岃屼笖鍙互璁╁噺灝戠嚎紼嬭皟搴︾殑嬈℃暟浠庤屾彁楂樻ц兘鍏跺疄綾諱技浜嶹SAAsyncSelect鍜宻elect鍑芥暟鐨勬満鍒舵洿瀹規(guī)槗鍏煎Unix錛屼絾鏄毦浠ュ疄鐜? 鎴戜滑鎯寵鐨?#8220;鎵╁睍鎬?#8221;銆傝屼笖windows鐨勫畬鎴愮鍙f満鍒跺湪鎿嶄綔緋葷粺鍐呴儴宸茬粡浣滀簡浼樺寲錛屾彁渚涗簡鏇撮珮鐨勬晥鐜囥傛墍浠ワ紝鎴戜滑閫夋嫨瀹屾垚绔彛寮濮嬫垜浠殑鏈嶅姟鍣ㄧ▼搴忕殑 寮鍙戙?br>1銆佸彂璧鋒搷浣滀笉涓瀹氬畬鎴愶紝緋葷粺浼氬湪瀹屾垚鐨勬椂鍊欓氱煡浣狅紝閫氳繃鐢ㄦ埛鍦ㄥ畬鎴愮鍙d笂鐨勭瓑寰咃紝澶勭悊鎿嶄綔鐨勭粨鏋溿傛墍浠ヨ鏈夋鏌ュ畬鎴愮鍙o紝鍙栨搷浣滅粨鏋滅殑綰? 紼嬨傚湪瀹屾垚绔彛涓婂畧鍊欑殑綰跨▼緋葷粺鏈変紭鍖栵紝闄ら潪鍦ㄦ墽琛岀殑綰跨▼闃誨錛屼笉浼氭湁鏂扮殑綰跨▼琚縺媧伙紝浠ユ鏉ュ噺灝戠嚎紼嬪垏鎹㈤犳垚鐨勬ц兘浠d環(huán)銆傛墍浠ュ鏋滅▼搴忎腑娌℃湁澶鐨勯樆濉? 鎿嶄綔錛屾病鏈夊繀瑕佸惎鍔ㄥお澶氱殑綰跨▼錛孋PU鏁伴噺鐨勪袱鍊嶏紝涓鑸繖鏍鋒潵鍚姩綰跨▼銆?br>2銆佹搷浣滀笌鐩稿叧鏁版嵁鐨勭粦瀹氭柟寮忥細鍦ㄦ彁浜ゆ暟鎹殑鏃跺欑敤鎴峰鏁版嵁鎵撶浉搴旂殑鏍囪錛岃褰曟搷浣滅殑綾誨瀷錛屽湪鐢ㄦ埛澶勭悊鎿嶄綔緇撴灉鐨勬椂鍊欙紝閫氳繃媯鏌ヨ嚜宸辨墦鐨勬爣璁板拰緋葷粺鐨勬搷浣滅粨鏋滆繘琛岀浉搴旂殑澶勭悊銆?<br>3銆? 鎿嶄綔榪斿洖鐨勬柟寮?涓鑸搷浣滃畬鎴愬悗瑕侀氱煡紼嬪簭榪涜鍚庣畫澶勭悊銆備絾鍐欐搷浣滃彲浠ヤ笉閫氱煡鐢ㄦ埛錛屾鏃跺鏋滅敤鎴峰啓鎿嶄綔涓嶈兘椹笂瀹屾垚錛屽啓鎿嶄綔鐨勭浉鍏蟲暟鎹細琚殏瀛樺埌鍒伴潪浜ゆ崲 緙撳啿鍖轟腑錛屽湪鎿嶄綔瀹屾垚鐨勬椂鍊欙紝緋葷粺浼氳嚜鍔ㄩ噴鏀劇紦鍐插尯銆傛鏃跺彂璧峰畬鍐欐搷浣滐紝浣跨敤鐨勫唴瀛樺氨鍙互閲婃斁浜嗐傛鏃跺鏋滃崰鐢ㄩ潪浜ゆ崲緙撳啿澶浼氫嬌緋葷粺鍋滄鍝嶅簲銆?br><strong><br>3銆佸畬鎴愮鍙o紙Completion Ports 錛夌浉鍏蟲暟鎹粨鏋勫拰鍒涘緩<br></strong>    鍏跺疄鍙互鎶婂畬鎴愮鍙g湅鎴愮郴緇熺淮鎶ょ殑涓涓槦鍒楋紝鎿嶄綔緋葷粺鎶婇噸鍙營O鎿嶄綔瀹屾垚鐨勪簨浠墮氱煡鏀懼埌璇ラ槦鍒楅噷錛岀敱浜庢槸鏆撮湶 “鎿嶄綔瀹屾垚”鐨勪簨浠墮氱煡錛屾墍浠ュ懡鍚嶄負“瀹屾垚绔彛”錛圕Ompletion Ports錛夈備竴涓猻ocket琚垱寤哄悗錛屽彲浠ュ湪浠諱綍鏃跺埢鍜屼竴涓畬鎴愮鍙h仈緋昏搗鏉ャ?br>瀹屾垚绔彛鐩稿叧鏈閲嶈鐨勬槸OVERLAPPED鏁版嵁緇撴瀯<br>typedef struct _OVERLAPPED { <br>    ULONG_PTR Internal;//琚郴緇熷唴閮ㄨ祴鍊鹼紝鐢ㄦ潵琛ㄧず緋葷粺鐘舵?<br>    ULONG_PTR InternalHigh;// 琚郴緇熷唴閮ㄨ祴鍊鹼紝浼犺緭鐨勫瓧鑺傛暟 <br>    union { <br>        struct { <br>            DWORD Offset;//鍜孫ffsetHigh鍚堟垚涓涓?4浣嶇殑鏁存暟錛岀敤鏉ヨ〃紺轟粠鏂囦歡澶撮儴鐨勫灝戝瓧鑺傚紑濮?<br>            DWORD OffsetHigh;//鎿嶄綔錛屽鏋滀笉鏄鏂囦歡I/O鏉ユ搷浣滐紝鍒欏繀欏昏瀹氫負0 <br>        }; <br>        PVOID Pointer; <br>    }; <br>    HANDLE hEvent;//濡傛灉涓嶄嬌鐢紝灝卞姟蹇呰涓?,鍚﹀垯璇瘋祴涓涓湁鏁堢殑Event鍙ユ焺 <br>} OVERLAPPED, *LPOVERLAPPED; <br><br>涓嬮潰鏄紓姝ユ柟寮忎嬌鐢≧eadFile鐨勪竴涓緥瀛?<br>OVERLAPPED Overlapped; <br>Overlapped.Offset=345; <br>Overlapped.OffsetHigh=0; <br>Overlapped.hEvent=0; <br>//鍋囧畾鍏朵粬鍙傛暟閮藉凡緇忚鍒濆鍖?<br>ReadFile(hFile,buffer,sizeof(buffer),&dwNumBytesRead,&Overlapped); <br>榪欐牱灝卞畬鎴愪簡寮傛鏂瑰紡璇繪枃浠剁殑鎿嶄綔錛岀劧鍚嶳eadFile鍑芥暟榪斿洖錛岀敱鎿嶄綔緋葷粺鍋氳嚜宸辯殑浜嬫儏錛屼笅闈粙緇嶅嚑涓笌OVERLAPPED緇撴瀯鐩稿叧鐨勫嚱鏁?<br>絳夊緟閲嶅彔I/0鎿嶄綔瀹屾垚鐨勫嚱鏁?<br>BOOL GetOverlappedResult (<br>HANDLE hFile,<br>LPOVERLAPPED lpOverlapped,//鎺ュ彈榪斿洖鐨勯噸鍙營/0緇撴瀯<br>LPDWORD lpcbTransfer,//鎴愬姛浼犺緭浜嗗灝戝瓧鑺傛暟<br>BOOL fWait //TRUE鍙湁褰撴搷浣滃畬鎴愭墠榪斿洖錛孎ALSE鐩存帴榪斿洖錛屽鏋滄搷浣滄病鏈夊畬鎴愶紝閫氳繃璋?/鐢℅etLastError ( )鍑芥暟浼氳繑鍥濫RROR_IO_INCOMPLETE <br>);<br>瀹廐asOverlappedIoCompleted鍙互甯姪鎴戜滑嫻嬭瘯閲嶅彔I/0鎿嶄綔鏄惁瀹屾垚錛岃瀹忓OVERLAPPED緇撴瀯鐨処nternal鎴愬憳榪涜浜嗘祴璇曪紝鏌ョ湅鏄惁絳変簬STATUS_PENDING鍊箋?/p> <p>        涓鑸潵璇達紝涓涓簲鐢ㄧ▼搴忓彲浠ュ垱寤哄涓伐浣滅嚎紼嬫潵澶勭悊瀹屾垚绔彛涓婄殑閫氱煡浜嬩歡銆傚伐浣滅嚎紼嬬殑鏁伴噺渚濊禆浜庣▼搴忕殑鍏蜂綋闇瑕併備絾鏄湪鐞嗘兂鐨勬儏鍐典笅錛屽簲璇ュ搴斾竴涓狢PU 鍒涘緩涓涓嚎紼嬨傚洜涓哄湪瀹屾垚绔彛鐞嗘兂妯″瀷涓紝姣忎釜綰跨▼閮藉彲浠ヤ粠緋葷粺鑾峰緱涓涓?#8220;鍘熷瓙”鎬х殑鏃墮棿鐗囷紝杞暘榪愯騫舵鏌ュ畬鎴愮鍙o紝綰跨▼鐨勫垏鎹㈡槸棰濆鐨勫紑閿銆傚湪瀹為檯寮 鍙戠殑鏃跺欙紝榪樿鑰冭檻榪欎簺綰跨▼鏄惁鐗墊秹鍒板叾浠栧牭濉炴搷浣滅殑鎯呭喌銆傚鏋滄煇綰跨▼榪涜鍫靛鎿嶄綔錛岀郴緇熷垯灝嗗叾鎸傝搗錛岃鍒殑綰跨▼鑾峰緱榪愯鏃墮棿銆傚洜姝わ紝濡傛灉鏈夎繖鏍風殑鎯呭喌錛? 鍙互澶氬垱寤哄嚑涓嚎紼嬫潵灝介噺鍒╃敤鏃墮棿銆?br>搴旂敤瀹屾垚绔彛錛?br>    鍒涘緩瀹屾垚绔彛錛氬畬鎴愮鍙f槸涓涓唴鏍稿璞★紝浣跨敤鏃朵粬鎬繪槸瑕佸拰鑷沖皯涓涓湁鏁堢殑璁懼鍙ユ焺榪涜鍏寵仈錛屽畬鎴愮鍙f槸涓涓鏉傜殑鍐呮牳瀵硅薄錛屽垱寤哄畠鐨勫嚱鏁版槸錛?br>HANDLE CreateIoCompletionPort( <br>    IN HANDLE FileHandle, <br>    IN HANDLE ExistingCompletionPort, <br>    IN ULONG_PTR CompletionKey, <br>    IN DWORD NumberOfConcurrentThreads <br>    ); <br><br>閫氬父鍒涘緩宸ヤ綔鍒嗕袱姝ワ細<br>絎竴姝ワ紝鍒涘緩涓涓柊鐨勫畬鎴愮鍙e唴鏍稿璞★紝鍙互浣跨敤涓嬮潰鐨勫嚱鏁幫細<br>       HANDLE CreateNewCompletionPort(DWORD dwNumberOfThreads) <br>{ <br>          return CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,NULL,dwNumberOfThreads); <br>};<br>       <br>絎簩姝ワ紝灝嗗垰鍒涘緩鐨勫畬鎴愮鍙e拰涓涓湁鏁堢殑璁懼鍙ユ焺鍏寵仈璧鋒潵錛屽彲浠ヤ嬌鐢ㄤ笅闈㈢殑鍑芥暟錛?br>       bool AssicoateDeviceWithCompletionPort(HANDLE hCompPort,HANDLE hDevice,DWORD dwCompKey) <br>{ <br>          HANDLE h=CreateIoCompletionPort(hDevice,hCompPort,dwCompKey,0); <br>          return h==hCompPort; <br>}; <br>璇存槑 <br>1錛?CreateIoCompletionPort鍑芥暟涔熷彲浠ヤ竴嬈℃х殑鏃㈠垱寤哄畬鎴愮鍙e璞★紝鍙堝叧鑱斿埌涓涓湁鏁堢殑璁懼鍙ユ焺 <br>2錛?CompletionKey鏄竴涓彲浠ヨ嚜宸卞畾涔夌殑鍙傛暟錛屾垜浠彲浠ユ妸涓涓粨鏋勭殑鍦板潃璧嬬粰瀹冿紝鐒跺悗鍦ㄥ悎閫傜殑鏃跺欏彇鍑烘潵浣跨敤錛屾渶濂借淇濊瘉緇撴瀯閲岄潰鐨勫唴瀛樹笉鏄垎閰嶅湪鏍堜笂錛岄櫎闈炰綘鏈夊崄鍒嗙殑鎶婃彙鍐呭瓨浼氫繚鐣欏埌浣犺浣跨敤鐨勯偅涓鍒匯?br>3錛? NumberOfConcurrentThreads閫氬父鐢ㄦ潵鎸囧畾瑕佸厑璁稿悓鏃惰繍琛岀殑鐨勭嚎紼嬬殑鏈澶т釜鏁般傞氬父鎴戜滑鎸囧畾涓?錛岃繖鏍風郴緇熶細鏍規(guī)嵁CPU鐨勪釜鏁版潵鑷? 鍔ㄧ‘瀹氥傚垱寤哄拰鍏寵仈鐨勫姩浣滃畬鎴愬悗錛岀郴緇熶細灝嗗畬鎴愮鍙e叧鑱旂殑璁懼鍙ユ焺銆佸畬鎴愰敭浣滀負涓鏉$邯褰曞姞鍏ュ埌榪欎釜瀹屾垚绔彛鐨勮澶囧垪琛ㄤ腑銆傚鏋滀綘鏈夊涓畬鎴愮鍙o紝灝變細鏈夊 涓搴旂殑璁懼鍒楄〃銆傚鏋滆澶囧彞鏌勮鍏抽棴錛屽垯琛ㄤ腑鑷姩鍒犻櫎璇ョ邯褰曘?br><strong><br>4銆佸畬鎴愮鍙g嚎紼嬬殑宸ヤ綔鍘熺悊</strong><br>瀹屾垚绔彛鍙互甯姪鎴戜滑綆$悊綰跨▼姹狅紝浣嗘槸綰跨▼姹犱腑鐨勭嚎紼嬮渶瑕佹垜浠嬌鐢╛beginthreadex鏉ュ垱寤猴紝鍑粈涔堥氱煡瀹屾垚绔彛綆$悊鎴戜滑鐨勬柊綰跨▼鍛紵絳旀鍦ㄥ嚱鏁癎etQueuedCompletionStatus銆傝鍑芥暟鍘熷瀷錛?<br>BOOL GetQueuedCompletionStatus( <br>    IN HANDLE CompletionPort, <br>    OUT LPDWORD lpNumberOfBytesTransferred, <br>    OUT PULONG_PTR lpCompletionKey, <br>    OUT LPOVERLAPPED *lpOverlapped, <br>    IN DWORD dwMilliseconds <br>); <br>榪? 涓嚱鏁拌瘯鍥句粠鎸囧畾鐨勫畬鎴愮鍙g殑I/0瀹屾垚闃熷垪涓娊鍙栫邯褰曘傚彧鏈夊綋閲嶅彔I/O鍔ㄤ綔瀹屾垚鐨勬椂鍊欙紝瀹屾垚闃熷垪涓墠鏈夌邯褰曘傚嚒鏄皟鐢ㄨ繖涓嚱鏁扮殑綰跨▼灝嗚鏀懼叆鍒板畬鎴愮 鍙g殑絳夊緟綰跨▼闃熷垪涓紝鍥犳瀹屾垚绔彛灝卞彲浠ュ湪鑷繁鐨勭嚎紼嬫睜涓府鍔╂垜浠淮鎶よ繖涓嚎紼嬨傚畬鎴愮鍙g殑I/0瀹屾垚闃熷垪涓瓨鏀句簡褰撻噸鍙營/0瀹屾垚鐨勭粨鏋?--- 涓鏉$邯褰曪紝璇ョ邯褰曟嫢鏈夊洓涓瓧孌碉紝鍓嶄笁欏瑰氨瀵瑰簲GetQueuedCompletionStatus鍑芥暟鐨?銆?銆?鍙傛暟錛屾渶鍚庝竴涓瓧孌墊槸閿欒淇℃伅 dwError銆傛垜浠篃鍙互閫氳繃璋冪敤PostQueudCompletionStatus妯℃嫙瀹屾垚浜嗕竴涓噸鍙營/0鎿嶄綔銆?<br>褰揑/0瀹屾垚闃熷垪涓? 鍑虹幇浜嗙邯褰曪紝瀹屾垚绔彛灝嗕細媯鏌ョ瓑寰呯嚎紼嬮槦鍒楋紝璇ラ槦鍒椾腑鐨勭嚎紼嬮兘鏄氳繃璋冪敤GetQueuedCompletionStatus鍑芥暟浣胯嚜宸卞姞鍏ラ槦鍒楃殑銆傜瓑寰? 綰跨▼闃熷垪寰堢畝鍗曪紝鍙槸淇濆瓨浜嗚繖浜涚嚎紼嬬殑ID銆傚畬鎴愮鍙d細鎸夌収鍚庤繘鍏堝嚭鐨勫師鍒欏皢涓涓嚎紼嬮槦鍒楃殑ID鏀懼叆鍒伴噴鏀劇嚎紼嬪垪琛ㄤ腑錛屽悓鏃惰綰跨▼灝嗕粠絳夊緟 GetQueuedCompletionStatus鍑芥暟榪斿洖鐨勭潯鐪犵姸鎬佷腑鍙樹負鍙皟搴︾姸鎬佺瓑寰匔PU鐨勮皟搴︺傛墍浠ユ垜浠殑綰跨▼瑕佹兂鎴愪負瀹屾垚绔彛綆$悊鐨勭嚎紼嬶紝 灝卞繀欏昏璋冪敤GetQueuedCompletionStatus鍑芥暟銆傚嚭浜庢ц兘鐨勪紭鍖栵紝瀹為檯涓婂畬鎴愮鍙h繕緇存姢浜嗕竴涓殏鍋滅嚎紼嬪垪琛紝鍏蜂綋緇嗚妭鍙互鍙傝? 銆奧indows楂樼駭緙栫▼鎸囧崡銆嬶紝鎴戜滑鐜板湪鐭ラ亾鐨勭煡璇嗭紝宸茬粡瓚沖浜嗐? 瀹屾垚绔彛綰跨▼闂存暟鎹紶閫掔嚎紼嬮棿浼犻掓暟鎹渶甯哥敤鐨勫姙娉曟槸鍦╛beginthreadex鍑芥暟涓皢鍙傛暟浼犻掔粰綰跨▼鍑芥暟錛屾垨鑰呬嬌鐢ㄥ叏灞鍙橀噺銆備絾鏄畬鎴愮鍙h繕鏈夎嚜 宸辯殑浼犻掓暟鎹殑鏂規(guī)硶錛岀瓟妗堝氨鍦ㄤ簬CompletionKey鍜孫VERLAPPED鍙傛暟銆?br>CompletionKey琚繚瀛樺湪瀹屾垚绔彛鐨勮澶囪〃 涓紝鏄拰璁懼鍙ユ焺涓涓瀵瑰簲鐨勶紝鎴戜滑鍙互灝嗕笌璁懼鍙ユ焺鐩稿叧鐨勬暟鎹繚瀛樺埌CompletionKey涓紝鎴栬呭皢CompletionKey琛ㄧず涓虹粨鏋勬寚閽堬紝榪? 鏍峰氨鍙互浼犻掓洿鍔犱赴瀵岀殑鍐呭銆傝繖浜涘唴瀹瑰彧鑳藉湪涓寮濮嬪叧鑱斿畬鎴愮鍙e拰璁懼鍙ユ焺鐨勬椂鍊欏仛錛屽洜姝や笉鑳藉湪浠ュ悗鍔ㄦ佹敼鍙樸?br>OVERLAPPED鍙傛暟鏄湪姣忔 璋冪敤ReadFile榪欐牱鐨勬敮鎸侀噸鍙營/0鐨勫嚱鏁版椂浼犻掔粰瀹屾垚绔彛鐨勩傛垜浠彲浠ョ湅鍒幫紝濡傛灉鎴戜滑涓嶆槸瀵規(guī)枃浠惰澶囧仛鎿嶄綔錛岃緇撴瀯鐨勬垚鍛樺彉閲忓氨瀵規(guī)垜浠嚑涔庢鏃犱綔 鐢ㄣ傛垜浠渶瑕侀檮鍔犱俊鎭紝鍙互鍒涘緩鑷繁鐨勭粨鏋勶紝鐒跺悗灝哋VERLAPPED緇撴瀯鍙橀噺浣滀負鎴戜滑緇撴瀯鍙橀噺鐨勭涓涓垚鍛橈紝鐒跺悗浼犻掔涓涓垚鍛樺彉閲忕殑鍦板潃緇? ReadFile鍑芥暟銆傚洜涓虹被鍨嬪尮閰嶏紝褰撶劧鍙互閫氳繃緙栬瘧銆傚綋GetQueuedCompletionStatus鍑芥暟榪斿洖鏃訛紝鎴戜滑鍙互鑾峰彇鍒扮涓涓垚鍛樺彉 閲忕殑鍦板潃錛岀劧鍚庝竴涓畝鍗曠殑寮哄埗杞崲錛屾垜浠氨鍙互鎶婂畠褰撲綔瀹屾暣鐨勮嚜瀹氫箟緇撴瀯鐨勬寚閽堜嬌鐢紝榪欐牱灝卞彲浠ヤ紶閫掑緢澶氶檮鍔犵殑鏁版嵁浜嗐傚お濂戒簡錛佸彧鏈変竴鐐硅娉ㄦ剰錛屽鏋滆法綰? 紼嬩紶閫掞紝璇鋒敞鎰忓皢鏁版嵁鍒嗛厤鍒板爢涓婏紝騫朵笖鎺ユ敹绔簲璇ュ皢鏁版嵁鐢ㄥ畬鍚庨噴鏀俱傛垜浠氬父闇瑕佸皢ReadFile榪欐牱鐨勫紓姝ュ嚱鏁扮殑鎵闇瑕佺殑緙撳啿鍖烘斁鍒版垜浠嚜瀹氫箟鐨勭粨鏋? 涓紝榪欐牱褰揋etQueuedCompletionStatus琚繑鍥炴椂錛屾垜浠殑鑷畾涔夌粨鏋勭殑緙撳啿鍖哄彉閲忎腑灝卞瓨鏀句簡I/0鎿嶄綔鐨勬暟鎹? CompletionKey鍜孫VERLAPPED鍙傛暟錛岄兘鍙互閫氳繃GetQueuedCompletionStatus鍑芥暟鑾峰緱銆?br>綰跨▼鐨勫畨鍏ㄩ鍑?br>       寰堝綰跨▼涓轟簡涓嶆涓嬈$殑鎵ц寮傛鏁版嵁澶勭悊錛岄渶瑕佷嬌鐢ㄥ涓嬭鍙?br>while (true)<br>{<br>       ......<br>       GetQueuedCompletionStatus(...); <br>        ......<br>}<br>閭d箞濡備綍閫鍑哄憿錛岀瓟妗堝氨鍦ㄤ簬涓婇潰鏇炬彁鍒扮殑PostQueudCompletionStatus鍑芥暟錛屾垜浠彲浠ョ敤瀹冨彂閫佷竴涓嚜瀹氫箟鐨勫寘鍚簡OVERLAPPED鎴愬憳鍙橀噺鐨勭粨鏋勫湴鍧錛岄噷闈㈠寘鍚竴涓姸鎬佸彉閲忥紝褰撶姸鎬佸彉閲忎負閫鍑烘爣蹇楁椂錛岀嚎紼嬪氨鎵ц娓呴櫎鍔ㄤ綔鐒跺悗閫鍑恒?br><strong><br>5銆乄indows瀹屾垚绔彛鐨勫疄渚嬩唬鐮侊細<br></strong>DWORD WINAPI WorkerThread(LPVOID lpParam)<br>{ <br>ULONG_PTR *PerHandleKey;<br>OVERLAPPED *Overlap;<br>OVERLAPPEDPLUS *OverlapPlus,<br>*newolp;<br>DWORD dwBytesXfered;<br>while (1)<br>{<br>ret = GetQueuedCompletionStatus(<br>hIocp,<br>&dwBytesXfered,<br>(PULONG_PTR)&PerHandleKey,<br>&Overlap,<br>INFINITE);<br>if (ret == 0)<br>{<br>// Operation failed<br>continue;<br>}<br>OverlapPlus = CONTAINING_RECORD(Overlap, OVERLAPPEDPLUS, ol);<br>switch (OverlapPlus->OpCode)<br>{<br>case OP_ACCEPT:<br>// Client socket is contained in OverlapPlus.sclient<br>// Add client to completion port<br>CreateIoCompletionPort(<br>(HANDLE)OverlapPlus->sclient,<br>hIocp,<br>(ULONG_PTR)0,<br>0);<br>// Need a new OVERLAPPEDPLUS structure<br>// for the newly accepted socket. Perhaps<br>// keep a look aside list of free structures.<br>newolp = AllocateOverlappedPlus();<br>if (!newolp)<br>{<br>// Error<br>}<br>newolp->s = OverlapPlus->sclient;<br>newolp->OpCode = OP_READ;<br>// This function divpares the data to be sent<br>PrepareSendBuffer(&newolp->wbuf);<br>ret = WSASend(<br>newolp->s,<br>&newolp->wbuf,<br>1,<br>&newolp->dwBytes,<br>0,<br>&newolp.ol,<br>NULL);<br>if (ret == SOCKET_ERROR)<br>{<br>if (WSAGetLastError() != WSA_IO_PENDING)<br>{<br>// Error<br>}<br>}<br>// Put structure in look aside list for later use<br>FreeOverlappedPlus(OverlapPlus);<br>// Signal accept thread to issue another AcceptEx<br>SetEvent(hAcceptThread);<br>break;<br>case OP_READ:<br>// Process the data read <br>// Repost the read if necessary, reusing the same<br>// receive buffer as before<br>memset(&OverlapPlus->ol, 0, sizeof(OVERLAPPED));<br>ret = WSARecv(<br>OverlapPlus->s,<br>&OverlapPlus->wbuf,<br>1,<br>&OverlapPlus->dwBytes,<br>&OverlapPlus->dwFlags,<br>&OverlapPlus->ol,<br>NULL);<br>if (ret == SOCKET_ERROR)<br>{<br>if (WSAGetLastError() != WSA_IO_PENDING)<br>{<br>// Error<br>}<br>}<br>break;<br>case OP_WRITE:<br>// Process the data sent, etc.<br>break;<br>} // switch<br>} // while<br>} // WorkerThread<br>銆</p> <p>鏌ョ湅浠ヤ笂浠g爜錛屾敞鎰忓鏋淥verlapped鎿嶄綔绔嬪埢澶辮觸錛堟瘮濡傦紝榪斿洖SOCKET_ERROR鎴栧叾浠栭潪WSA_IO_PENDING鐨勯敊璇級錛屽垯 娌℃湁浠諱綍瀹屾垚閫氱煡鏃墮棿浼氳鏀懼埌瀹屾垚绔彛闃熷垪閲屻傚弽涔嬶紝鍒欎竴瀹氭湁鐩稿簲鐨勯氱煡鏃墮棿琚斁鍒板畬鎴愮鍙i槦鍒椼傛洿瀹屽杽鐨勫叧浜嶹insock鐨勫畬鎴愮鍙f満鍒訛紝鍙互鍙傝? MSDN鐨凪icrosoft PlatFormSDK錛岄偅閲屾湁瀹屾垚绔彛鐨勪緥瀛愩傝闂?a ><u><font color="#0000ff">http://msdn.microsoft.com/library/techart/msdn_servrapp.htm</font></u></a>鍙互鑾峰緱鏇村淇℃伅銆?/p> <p><strong>Linux鐨凟Poll妯″瀷<br></strong>Linux 2.6鍐呮牳涓彁楂樼綉緇淚/O鎬ц兘鐨勬柊鏂規(guī)硶-epoll I/O澶氳礬澶嶇敤鎶鏈湪姣旇緝澶氱殑TCP緗戠粶鏈嶅姟鍣ㄤ腑鏈変嬌鐢紝鍗蟲瘮杈冨鐨勭敤鍒皊elect鍑芥暟銆?br><br><strong>1銆佷負浠涔坰elect钀藉悗<br></strong>棣栧厛錛屽湪Linux鍐呮牳涓紝select鎵鐢ㄥ埌鐨凢D_SET鏄湁闄愮殑錛屽嵆鍐呮牳涓湁涓弬鏁癬_FD_SETSIZE瀹氫箟浜嗘瘡涓狥D_SET鐨勫彞鏌勪釜鏁幫紝鍦ㄦ垜鐢ㄧ殑2.6.15-25-386鍐呮牳涓紝璇ュ兼槸1024錛屾悳绱㈠唴鏍告簮浠g爜寰楀埌錛?br>include/linux/posix_types.h:#define __FD_SETSIZE         1024<br>涔? 灝辨槸璇達紝濡傛灉鎯寵鍚屾椂媯嫻?025涓彞鏌勭殑鍙鐘舵佹槸涓嶅彲鑳界敤select瀹炵幇鐨勩傛垨鑰呭悓鏃舵嫻?025涓彞鏌勭殑鍙啓鐘舵佷篃鏄笉鍙兘鐨勩傚叾嬈★紝鍐呮牳涓疄鐜? select鏄敤杞鏂規(guī)硶錛屽嵆姣忔媯嫻嬮兘浼氶亶鍘嗘墍鏈塅D_SET涓殑鍙ユ焺錛屾樉鐒訛紝select鍑芥暟鎵ц鏃墮棿涓嶧D_SET涓殑鍙ユ焺涓暟鏈変竴涓瘮渚嬪叧緋伙紝鍗? select瑕佹嫻嬬殑鍙ユ焺鏁拌秺澶氬氨浼氳秺璐規(guī)椂銆傚綋鐒訛紝鍦ㄥ墠鏂囦腑鎴戝茍娌℃湁鎻愬強poll鏂規(guī)硶錛屼簨瀹炰笂鐢╯elect鐨勬湅鍙嬩竴瀹氫篃璇曡繃poll錛屾垜涓漢瑙夊緱 select鍜宲oll澶у悓灝忓紓錛屼釜浜哄亸濂戒簬鐢╯elect鑰屽凡銆?/p> <p><strong>2銆佸唴鏍鎬腑鎻愰珮I(yè)/O鎬ц兘鐨勬柊鏂規(guī)硶epoll</strong><br>epoll鏄粈涔堬紵鎸夌収man鎵嬪唽鐨勮娉曪細鏄負澶勭悊澶ф壒閲忓彞鏌勮屼綔浜嗘敼榪涚殑poll銆傝浣跨敤epoll鍙渶瑕佽繖涓変釜緋葷粺璋冪敤錛歟poll_create(2)錛?epoll_ctl(2)錛?epoll_wait(2)銆?br>褰撶劧錛岃繖涓嶆槸2.6鍐呮牳鎵嶆湁鐨勶紝瀹冩槸鍦?.5.44鍐呮牳涓寮曡繘鐨?epoll(4) is a new API introduced in Linux kernel 2.5.44)</p> <p>Linux2.6鍐呮牳epoll浠嬬粛<br>鍏堜粙緇?鏈功銆奣he Linux Networking Architecture--Design and Implementation of Network Protocols in the Linux Kernel銆嬶紝浠?.4鍐呮牳璁茶ВLinux TCP/IP瀹炵幇錛岀浉褰撲笉閿?浣滀負涓涓幇瀹炰笘鐣屼腑鐨勫疄鐜幫紝寰堝鏃跺欎綘蹇呴』浣滃緢澶氭潈琛★紝榪欐椂鍊欏弬鑰冧竴涓箙緇忚冮獙鐨勭郴緇熸洿鏈夊疄闄呮剰涔夈備婦涓緥瀛?linux鍐? 鏍鎬腑sk_buff緇撴瀯涓轟簡榪芥眰閫熷害鍜屽畨鍏紝鐗虹壊浜嗛儴鍒嗗唴瀛橈紝鎵浠ュ湪鍙戦乀CP鍖呯殑鏃跺欙紝鏃犺搴旂敤灞傛暟鎹澶?sk_buff鏈灝忎篃鏈?72鐨勫瓧鑺?鍏跺疄 瀵逛簬socket搴旂敤灞傜▼搴忔潵璇達紝鍙﹀涓鏈功銆奤NIX Network Programming Volume 1銆嬫剰涔夋洿澶т竴鐐?2003騫寸殑鏃跺欙紝榪欐湰涔﹀嚭浜嗘渶鏂扮殑絎?鐗堟湰錛屼笉榪囦富瑕佽繕鏄慨璁㈢2鐗堟湰銆傚叾涓6绔犮奍/O Multiplexing銆嬫槸鏈閲嶈鐨勩係tevens緇欏嚭浜嗙綉緇淚O鐨勫熀鏈ā鍨嬨傚湪榪欓噷鏈閲嶈鐨勮帿榪囦簬select妯″瀷鍜孉synchronous I/O妯″瀷.浠庣悊璁轟笂璇達紝AIO浼間箮鏄渶楂樻晥鐨勶紝浣犵殑IO鎿嶄綔鍙互绔嬪嵆榪斿洖錛岀劧鍚庣瓑寰卭s鍛婅瘔浣營O鎿嶄綔瀹屾垚銆備絾鏄竴鐩翠互鏉ワ紝濡備綍瀹炵幇灝辨病鏈変竴涓畬緹庣殑鏂? 妗堛傛渶钁楀悕鐨剋indows瀹屾垚绔彛瀹炵幇鐨凙IO,瀹為檯涓婁篃鏄唴閮ㄧ敤綰跨▼姹犲疄鐜扮殑緗簡錛屾渶鍚庣殑緇撴灉鏄疘O鏈変釜綰跨▼姹狅紝浣犲簲鐢ㄤ篃闇瑕佷竴涓嚎紼嬫睜...... 寰堝鏂囨。鍏跺疄宸茬粡鎸囧嚭浜嗚繖甯︽潵鐨勭嚎紼媍ontext-switch甯︽潵鐨勪唬浠楓傚湪linux 騫沖彴涓婏紝鍏充簬緗戠粶AIO涓鐩存槸鏀瑰姩鏈澶氱殑鍦版柟錛?.4鐨勫勾浠e氨鏈夊緢澶欰IO鍐呮牳patch,鏈钁楀悕鐨勫簲璇ョ畻鏄疭GI閭d釜銆備絾鏄竴鐩村埌2.6鍐呮牳鍙戝竷錛岀綉緇? 妯″潡鐨凙IO涓鐩存病鏈夎繘鍏ョǔ瀹氬唴鏍哥増鏈?澶ч儴鍒嗛兘鏄嬌鐢ㄧ敤鎴風嚎紼嬫ā鎷熸柟娉曪紝鍦ㄤ嬌鐢ㄤ簡NPTL鐨刲inux涓婇潰鍏跺疄鍜寃indows鐨勫畬鎴愮鍙e熀鏈笂宸笉澶? 浜?銆?.6鍐呮牳鎵鏀寔鐨凙IO鐗規(guī)寚紓佺洏鐨凙IO---鏀寔io_submit(),io_getevents()浠ュ強瀵笵irect IO鐨勬敮鎸?灝辨槸緇曡繃VFS緋葷粺buffer鐩存帴鍐欑‖鐩橈紝瀵逛簬嫻佹湇鍔″櫒鍦ㄥ唴瀛樺鉤紼蟲т笂鏈夌浉褰撳府鍔?銆?br>鎵浠ワ紝鍓╀笅鐨剆elect妯″瀷鍩烘湰涓婂氨鏄垜浠? 鍦╨inux涓婇潰鐨勫敮涓閫夋嫨錛屽叾瀹烇紝濡傛灉鍔犱笂no-block socket鐨勯厤緗紝鍙互瀹屾垚涓涓?浼?AIO鐨勫疄鐜幫紝鍙笉榪囨帹鍔ㄥ姏鍦ㄤ簬浣犺屼笉鏄痮s鑰屽凡銆備笉榪囦紶緇熺殑select/poll鍑芥暟鏈夌潃涓浜涙棤娉曞繊鍙楃殑緙? 鐐癸紝鎵浠ユ敼榪涗竴鐩存槸2.4-2.5寮鍙戠増鏈唴鏍哥殑浠誨姟錛屽寘鎷?dev/poll錛宺ealtime signal絳夌瓑銆傛渶緇堬紝Davide Libenzi寮鍙戠殑epoll榪涘叆2.6鍐呮牳鎴愪負姝e紡鐨勮В鍐蟲柟妗?br><strong><br>3銆乪poll鐨勪紭鐐?/strong><br><1>鏀寔涓涓繘紼嬫墦寮澶ф暟鐩殑socket鎻忚堪絎?FD)<br>select 鏈涓嶈兘蹇嶅彈鐨勬槸涓涓繘紼嬫墍鎵撳紑鐨凢D鏄湁涓瀹氶檺鍒剁殑錛岀敱FD_SETSIZE璁劇疆錛岄粯璁ゅ兼槸2048銆傚浜庨偅浜涢渶瑕佹敮鎸佺殑涓婁竾榪炴帴鏁扮洰鐨処M鏈嶅姟鍣ㄦ潵璇存樉 鐒跺お灝戜簡銆傝繖鏃跺欎綘涓鏄彲浠ラ夋嫨淇敼榪欎釜瀹忕劧鍚庨噸鏂扮紪璇戝唴鏍革紝涓嶈繃璧勬枡涔熷悓鏃舵寚鍑鴻繖鏍蜂細甯︽潵緗戠粶鏁堢巼鐨勪笅闄嶏紝浜屾槸鍙互閫夋嫨澶氳繘紼嬬殑瑙e喅鏂規(guī)(浼犵粺鐨? Apache鏂規(guī))錛屼笉榪囪櫧鐒秎inux涓婇潰鍒涘緩榪涚▼鐨勪唬浠鋒瘮杈冨皬錛屼絾浠嶆棫鏄笉鍙拷瑙嗙殑錛屽姞涓婅繘紼嬮棿鏁版嵁鍚屾榪滄瘮涓嶄笂綰跨▼闂村悓姝ョ殑楂樻晥錛屾墍浠ヤ篃涓嶆槸涓縐嶅畬 緹庣殑鏂規(guī)銆備笉榪? epoll鍒欐病鏈夎繖涓檺鍒訛紝瀹冩墍鏀寔鐨凢D涓婇檺鏄渶澶у彲浠ユ墦寮鏂囦歡鐨勬暟鐩紝榪欎釜鏁板瓧涓鑸繙澶т簬2048,涓句釜渚嬪瓙,鍦?GB鍐呭瓨鐨勬満鍣ㄤ笂澶х害鏄?0涓囧乏 鍙籌紝鍏蜂綋鏁扮洰鍙互cat /proc/sys/fs/file-max瀵熺湅,涓鑸潵璇磋繖涓暟鐩拰緋葷粺鍐呭瓨鍏崇郴寰堝ぇ銆?br><2>IO鏁堢巼涓嶉殢FD鏁扮洰澧炲姞鑰岀嚎鎬т笅闄?br>浼? 緇熺殑select/poll鍙︿竴涓嚧鍛藉急鐐瑰氨鏄綋浣犳嫢鏈変竴涓緢澶х殑socket闆嗗悎錛屼笉榪囩敱浜庣綉緇滃歡鏃訛紝浠諱竴鏃墮棿鍙湁閮ㄥ垎鐨剆ocket鏄?媧昏穬"鐨勶紝浣? 鏄痵elect/poll姣忔璋冪敤閮戒細綰挎ф壂鎻忓叏閮ㄧ殑闆嗗悎錛屽鑷存晥鐜囧憟鐜扮嚎鎬т笅闄嶃備絾鏄痚poll涓嶅瓨鍦ㄨ繖涓棶棰橈紝瀹冨彧浼氬"媧昏穬"鐨剆ocket榪涜鎿? 浣?--榪欐槸鍥犱負鍦ㄥ唴鏍稿疄鐜頒腑epoll鏄牴鎹瘡涓猣d涓婇潰鐨刢allback鍑芥暟瀹炵幇鐨勩傞偅涔堬紝鍙湁"媧昏穬"鐨剆ocket鎵嶄細涓誨姩鐨勫幓璋冪敤 callback鍑芥暟錛屽叾浠杋dle鐘舵乻ocket鍒欎笉浼氾紝鍦ㄨ繖鐐逛笂錛宔poll瀹炵幇浜嗕竴涓?浼?AIO錛屽洜涓鴻繖鏃跺欐帹鍔ㄥ姏鍦╫s鍐呮牳銆傚湪涓浜? benchmark涓紝濡傛灉鎵鏈夌殑socket鍩烘湰涓婇兘鏄椿璺冪殑---姣斿涓涓珮閫烲AN鐜錛宔poll騫朵笉姣攕elect/poll鏈変粈涔堟晥鐜囷紝鐩? 鍙嶏紝濡傛灉榪囧浣跨敤epoll_ctl,鏁堢巼鐩告瘮榪樻湁紼嶅井鐨勪笅闄嶃備絾鏄竴鏃︿嬌鐢╥dle connections妯℃嫙WAN鐜,epoll鐨勬晥鐜囧氨榪滃湪select/poll涔嬩笂浜嗐?br><3>浣跨敤mmap鍔犻熷唴鏍鎬笌鐢ㄦ埛絀洪棿鐨勬秷鎭紶閫掋?br>榪? 鐐瑰疄闄呬笂娑夊強鍒癳poll鐨勫叿浣撳疄鐜頒簡銆傛棤璁烘槸select,poll榪樻槸epoll閮介渶瑕佸唴鏍告妸FD娑堟伅閫氱煡緇欑敤鎴風┖闂達紝濡備綍閬垮厤涓嶅繀瑕佺殑鍐呭瓨鎷瘋礉灝卞緢 閲嶈錛屽湪榪欑偣涓婏紝epoll鏄氳繃鍐呮牳浜庣敤鎴風┖闂磎map鍚屼竴鍧楀唴瀛樺疄鐜扮殑銆傝屽鏋滀綘鎯蟲垜涓鏍蜂粠2.5鍐呮牳灝卞叧娉╡poll鐨勮瘽錛屼竴瀹氫笉浼氬繕璁版墜宸? mmap榪欎竴姝ョ殑銆?br><4>鍐呮牳寰皟<br>榪欎竴鐐瑰叾瀹炰笉綆梕poll鐨勪紭鐐逛簡錛岃屾槸鏁翠釜linux騫沖彴鐨勪紭鐐廣備篃璁鎬綘鍙互鎬鐤? linux騫沖彴錛屼絾鏄綘鏃犳硶鍥為伩linux騫沖彴璧嬩簣浣犲井璋冨唴鏍哥殑鑳藉姏銆傛瘮濡傦紝鍐呮牳TCP/IP鍗忚鏍堜嬌鐢ㄥ唴瀛樻睜綆$悊sk_buff緇撴瀯錛岄偅涔堝彲浠ュ湪榪愯鏃? 鏈熷姩鎬佽皟鏁磋繖涓唴瀛榩ool(skb_head_pool)鐨勫ぇ灝?-- 閫氳繃echo XXXX>/proc/sys/net/core/hot_list_length瀹屾垚銆傚啀姣斿listen鍑芥暟鐨勭2涓弬鏁?TCP瀹屾垚3嬈℃彙鎵? 鐨勬暟鎹寘闃熷垪闀垮害)錛屼篃鍙互鏍規(guī)嵁浣犲鉤鍙板唴瀛樺ぇ灝忓姩鎬佽皟鏁淬傛洿鐢氳嚦鍦ㄤ竴涓暟鎹寘闈㈡暟鐩法澶т絾鍚屾椂姣忎釜鏁版嵁鍖呮湰韜ぇ灝忓嵈寰堝皬鐨勭壒孌婄郴緇熶笂灝濊瘯鏈鏂扮殑NAPI緗? 鍗¢┍鍔ㄦ灦鏋勩?br>4銆乪poll鐨勫伐浣滄ā寮?br>浠や漢楂樺叴鐨勬槸錛?.6鍐呮牳鐨別poll姣斿叾2.5寮鍙戠増鏈殑/dev/epoll綆媧佷簡璁稿錛屾墍浠ワ紝澶ч儴鍒嗘儏鍐典笅錛屽己澶х殑涓滆タ寰寰鏄畝鍗曠殑銆傚敮涓鏈夌偣楹葷儲鏄痚poll鏈?縐嶅伐浣滄柟寮?LT鍜孍T銆?br>LT(level triggered)鏄己鐪佺殑宸ヤ綔鏂瑰紡錛屽茍涓斿悓鏃舵敮鎸乥lock鍜宯o-block socket.鍦ㄨ繖縐嶅仛娉曚腑錛屽唴鏍稿憡璇変綘涓涓枃浠舵弿榪扮鏄惁灝辯華浜嗭紝鐒跺悗浣犲彲浠ュ榪欎釜灝辯華鐨刦d榪涜IO鎿嶄綔銆傚鏋滀綘涓嶄綔浠諱綍鎿嶄綔錛屽唴鏍歌繕鏄細緇х畫閫氱煡浣? 鐨勶紝鎵浠ワ紝榪欑妯″紡緙栫▼鍑洪敊璇彲鑳芥ц灝忎竴鐐廣備紶緇熺殑select/poll閮芥槸榪欑妯″瀷鐨勪唬琛紟<br>ET (edge-triggered)鏄珮閫熷伐浣滄柟寮忥紝鍙敮鎸乶o-block socket銆傚湪榪欑妯″紡涓嬶紝褰撴弿榪扮浠庢湭灝辯華鍙樹負灝辯華鏃訛紝鍐呮牳閫氳繃epoll鍛婅瘔浣犮傜劧鍚庡畠浼氬亣璁句綘鐭ラ亾鏂囦歡鎻忚堪絎﹀凡緇忓氨緇紝騫朵笖涓嶄細鍐嶄負閭d釜鏂囦歡鎻忚堪 絎﹀彂閫佹洿澶氱殑灝辯華閫氱煡錛岀洿鍒頒綘鍋氫簡鏌愪簺鎿嶄綔瀵艱嚧閭d釜鏂囦歡鎻忚堪絎︿笉鍐嶄負灝辯華鐘舵佷簡(姣斿錛屼綘鍦ㄥ彂閫侊紝鎺ユ敹鎴栬呮帴鏀惰姹傦紝鎴栬呭彂閫佹帴鏀剁殑鏁版嵁灝戜簬涓瀹氶噺鏃跺鑷? 浜嗕竴涓狤WOULDBLOCK 閿欒錛夈備絾鏄娉ㄦ剰錛屽鏋滀竴鐩翠笉瀵硅繖涓猣d浣淚O鎿嶄綔(浠庤屽鑷村畠鍐嶆鍙樻垚鏈氨緇?錛屽唴鏍鎬笉浼氬彂閫佹洿澶氱殑閫氱煡(only once),涓嶈繃鍦═CP鍗忚涓紝ET妯″紡鐨勫姞閫熸晥鐢ㄤ粛闇瑕佹洿澶氱殑benchmark紜銆?br>epoll鍙湁epoll_create,epoll_ctl,epoll_wait 3涓郴緇熻皟鐢紝鍏蜂綋鐢ㄦ硶璇峰弬鑰?a ><u><font color="#0000ff">http://www.xmailserver.org/linux-patches/nio-improve.html</font></u></a> 錛屽湪<a ><u><font color="#0000ff">http://www.kegel.com/rn/</font></u></a>涔熸湁涓涓畬鏁寸殑渚嬪瓙錛屽ぇ瀹朵竴鐪嬪氨鐭ラ亾濡備綍浣跨敤浜?br>Leader/follower妯″紡綰跨▼pool瀹炵幇錛屼互鍙婂拰epoll鐨勯厤鍚堛?br><br><strong>5銆?epoll鐨勪嬌鐢ㄦ柟娉?/strong><br>    棣栧厛閫氳繃create_epoll(int maxfds)鏉ュ垱寤轟竴涓猠poll鐨勫彞鏌勶紝鍏朵腑maxfds涓轟綘epoll鎵鏀寔鐨勬渶澶у彞鏌勬暟銆傝繖涓嚱鏁頒細榪斿洖涓涓柊鐨別poll鍙ユ焺錛屼箣鍚庣殑鎵鏈夋搷浣? 灝嗛氳繃榪欎釜鍙ユ焺鏉ヨ繘琛屾搷浣溿傚湪鐢ㄥ畬涔嬪悗錛岃寰楃敤close()鏉ュ叧闂繖涓垱寤哄嚭鏉ョ殑epoll鍙ユ焺銆? 涔嬪悗鍦ㄤ綘鐨勭綉緇滀富寰幆閲岄潰錛屾瘡涓甯х殑璋冪敤epoll_wait(int epfd, epoll_event events, int max events, int timeout)鏉ユ煡璇㈡墍鏈夌殑緗戠粶鎺ュ彛錛岀湅鍝竴涓彲浠ヨ錛屽摢涓涓彲浠ュ啓浜嗐傚熀鏈殑璇硶涓猴細 <br>nfds = epoll_wait(kdpfd, events, maxevents, -1); <br>鍏? 涓璳dpfd涓虹敤epoll_create鍒涘緩涔嬪悗鐨勫彞鏌勶紝events鏄竴涓猠poll_event*鐨勬寚閽堬紝褰揺poll_wait榪欎釜鍑芥暟鎿嶄綔鎴愬姛 涔嬪悗錛宔poll_events閲岄潰灝嗗偍瀛樻墍鏈夌殑璇誨啓浜嬩歡銆俶ax_events鏄綋鍓嶉渶瑕佺洃鍚殑鎵鏈塻ocket鍙ユ焺鏁般傛渶鍚庝竴涓猼imeout鏄? epoll_wait鐨勮秴鏃訛紝涓?鐨勬椂鍊欒〃紺洪┈涓婅繑鍥烇紝涓?1鐨勬椂鍊欒〃紺轟竴鐩寸瓑涓嬪幓錛岀洿鍒版湁浜嬩歡鑼冨洿錛屼負浠繪剰姝f暣鏁扮殑鏃跺欒〃紺虹瓑榪欎箞闀跨殑鏃墮棿錛屽鏋滀竴鐩存病 鏈変簨浠訛紝鍒欒寖鍥淬備竴鑸鏋滅綉緇滀富寰幆鏄崟鐙殑綰跨▼鐨勮瘽錛屽彲浠ョ敤-1鏉ョ瓑錛岃繖鏍峰彲浠ヤ繚璇佷竴浜涙晥鐜囷紝濡傛灉鏄拰涓婚昏緫鍦ㄥ悓涓涓嚎紼嬬殑璇濓紝鍒欏彲浠ョ敤0鏉ヤ繚璇佷富寰幆 鐨勬晥鐜囥?/p> <p>epoll_wait鑼冨洿涔嬪悗搴旇鏄竴涓驚鐜紝閬嶅埄鎵鏈夌殑浜嬩歡錛?<br>for(n = 0; n < nfds; ++n) { <br>                if(events[n].data.fd == listener) { //濡傛灉鏄富socket鐨勪簨浠剁殑璇濓紝鍒欒〃紺烘湁鏂拌繛鎺ヨ繘鍏ヤ簡錛岃繘琛屾柊榪炴帴鐨勫鐞嗐?<br>                    client = accept(listener, (struct sockaddr *) &local, <br>                                    &addrlen); <br>                    if(client < 0){ <br>                        perror("accept"); <br>                        continue; <br>                    } <br>                    setnonblocking(client); // 灝嗘柊榪炴帴緗簬闈為樆濉炴ā寮?<br>                    ev.events = EPOLLIN | EPOLLET; // 騫朵笖灝嗘柊榪炴帴涔熷姞鍏POLL鐨勭洃鍚槦鍒椼?<br>娉ㄦ剰錛岃繖閲岀殑鍙傛暟EPOLLIN | EPOLLET騫舵病鏈夎緗鍐檚ocket鐨勭洃鍚紝濡傛灉鏈夊啓鎿嶄綔鐨勮瘽錛岃繖涓椂鍊檈poll鏄笉浼氳繑鍥炰簨浠剁殑錛屽鏋滆瀵瑰啓鎿嶄綔涔熺洃鍚殑璇濓紝搴旇鏄疎POLLIN | EPOLLOUT | EPOLLET <br>                    ev.data.fd = client; <br>                    if (epoll_ctl(kdpfd, EPOLL_CTL_ADD, client, &ev) < 0) { <br>// 璁劇疆濂絜vent涔嬪悗錛屽皢榪欎釜鏂扮殑event閫氳繃epoll_ctl鍔犲叆鍒癳poll鐨勭洃鍚槦鍒楅噷闈紝榪欓噷鐢‥POLL_CTL_ADD鏉ュ姞涓涓柊鐨? epoll浜嬩歡錛岄氳繃EPOLL_CTL_DEL鏉ュ噺灝戜竴涓猠poll浜嬩歡錛岄氳繃EPOLL_CTL_MOD鏉ユ敼鍙樹竴涓簨浠剁殑鐩戝惉鏂瑰紡銆?<br>                        fprintf(stderr, "epoll set insertion error: fd=%d0, <br>                                client); <br>                        return -1; <br>                    } <br>                } <br>                else // 濡傛灉涓嶆槸涓籹ocket鐨勪簨浠剁殑璇濓紝鍒欎唬琛ㄦ槸涓涓敤鎴穝ocket鐨勪簨浠訛紝鍒欐潵澶勭悊榪欎釜鐢ㄦ埛socket鐨勪簨鎯咃紝姣斿璇磖ead(fd,xxx)涔嬬被鐨勶紝鎴栬呬竴浜涘叾浠栫殑澶勭悊銆?<br>                    do_use_fd(events[n].data.fd); <br>}</p> <p>瀵癸紝epoll鐨勬搷浣滃氨榪欎箞綆鍗曪紝鎬誨叡涓嶈繃4涓狝PI錛歟poll_create, epoll_ctl, epoll_wait鍜宑lose銆?<br>濡傛灉鎮(zhèn)ㄥepoll鐨勬晥鐜囪繕涓嶅お浜嗚В錛岃鍙傝冩垜涔嬪墠鍏充簬緗戠粶娓告垙鐨勭綉緇滅紪紼嬬瓑鐩稿叧鐨勬枃绔犮?/p> <p><br>浠ュ墠鍏徃鐨勬湇鍔″櫒閮芥槸浣跨敤HTTP榪炴帴錛屼絾鏄繖鏍風殑璇濓紝鍦ㄦ墜鏈虹洰鍓嶇殑緗戠粶鎯呭喌涓嬩笉浣嗘樉寰楅熷害杈冩參錛岃屼笖涓嶇ǔ瀹氥傚洜姝ゅぇ瀹朵竴鑷村悓鎰忕敤 SOCKET鏉ヨ繘琛岃繛鎺ャ傝櫧鐒朵嬌鐢⊿OCKET涔嬪悗錛屽浜庣敤鎴風殑璐圭敤鍙兘浼氬鍔?鐢變簬鏄敤浜咰MNET鑰岄潪CMWAP)錛屼絾鏄紝縐夌潃鐢ㄦ埛浣撻獙鑷充笂鐨勫師鍒欙紝 鐩鎬俊澶у榪樻槸鑳藉鎺ュ彈鐨?甯屾湜閭d簺鐜╁鏈堟湯鏀跺埌甯愬崟涓嶅悗鑳藉淇濇寔鍏嬪埗...)銆?br>榪欐鐨勬湇鍔″櫒璁捐涓紝鏈閲嶈鐨勪竴涓獊鐮達紝鏄嬌鐢ㄤ簡EPOLL妯″瀷錛岃櫧鐒跺涔嬩篃鏄竴鐭ュ崐瑙o紝浣嗘槸鏃㈢劧鍦ㄥ悇澶C緗戞父涓凡緇忕粡榪囦簡濡傛涓ラ叿鐨勮冮獙錛岀浉淇′粬涓嶄細璁╂垜浠け鏈涳紝浣跨敤鍚庣殑緇撴灉錛岀‘瀹炰篃鏄〃鐜扮浉褰撲笉閿欍傚湪榪欓噷錛屾垜榪樻槸涓昏澶ц嚧浠嬬粛涓涓嬭繖涓ā鍨嬬殑緇撴瀯銆?br>6銆丩inux涓婨POll緙栫▼瀹炰緥<br>EPOLL妯″瀷浼間箮鍙湁涓縐嶆牸寮忥紝鎵浠ュぇ瀹跺彧瑕佸弬鑰冩垜涓嬮潰鐨勪唬鐮侊紝灝辮兘澶熷EPOLL鏈夋墍浜嗚В浜嗭紝浠g爜鐨勮В閲婇兘宸茬粡鍦ㄦ敞閲婁腑錛?/p> <p>while (TRUE)<br>{<br>int nfds = epoll_wait (m_epoll_fd, m_events, MAX_EVENTS, EPOLL_TIME_OUT);//絳夊緟EPOLL鏃墮棿鐨勫彂鐢燂紝鐩稿綋浜庣洃鍚紝鑷充簬鐩稿叧鐨勭鍙o紝闇瑕佸湪鍒濆鍖朎POLL鐨勬椂鍊欑粦瀹氥?br>if (nfds <= 0)<br>continue;<br>m_bOnTimeChecking = FALSE;<br>G_CurTime = time(NULL);<br>for (int i=0; i<br>{<br>try<br>{<br>if (m_events[i].data.fd == m_listen_http_fd)//濡傛灉鏂扮洃嫻嬪埌涓涓狧TTP鐢ㄦ埛榪炴帴鍒扮粦瀹氱殑HTTP绔彛錛屽緩绔嬫柊鐨勮繛鎺ャ傜敱浜庢垜浠柊閲囩敤浜哠OCKET榪炴帴錛屾墍浠ュ熀鏈病鐢ㄣ?br>{<br>OnAcceptHttpEpoll ();<br>}<br>else if (m_events[i].data.fd == m_listen_sock_fd)//濡傛灉鏂扮洃嫻嬪埌涓涓猄OCKET鐢ㄦ埛榪炴帴鍒頒簡緇戝畾鐨凷OCKET绔彛錛屽緩绔嬫柊鐨勮繛鎺ャ?br>{<br>OnAcceptSockEpoll ();<br>}<br>else if (m_events[i].events & EPOLLIN)//濡傛灉鏄凡緇忚繛鎺ョ殑鐢ㄦ埛錛屽茍涓旀敹鍒版暟鎹紝閭d箞榪涜璇誨叆銆?br>{<br>OnReadEpoll (i);<br>}</p> <p>OnWriteEpoll (i);//鏌ョ湅褰撳墠鐨勬椿鍔ㄨ繛鎺ユ槸鍚︽湁闇瑕佸啓鍑虹殑鏁版嵁銆?br>}<br>catch (int)<br>{<br>PRINTF ("CATCH鎹曡幏閿欒\n");<br>continue;<br>}<br>}<br>m_bOnTimeChecking = TRUE;<br>OnTimer ();//榪涜涓浜涘畾鏃剁殑鎿嶄綔錛屼富瑕佸氨鏄垹闄や竴浜涚煭綰跨敤鎴風瓑銆?br>}<br>銆鍏跺疄EPOLL鐨勭簿鍗庯紝涔熷氨鏄笂榪扮殑鍑犳鐭煭鐨勪唬鐮侊紝鐪嬫潵鏃朵唬鐪熺殑涓嶅悓浜嗭紝浠ュ墠濡備綍鎺ュ彈澶ч噺鐢ㄦ埛榪炴帴鐨勯棶棰橈紝鐜板湪鍗磋濡傛杞繪澗鐨勬悶瀹氾紝鐪熸槸璁╀漢涓嶅緱涓嶆劅鍙癸紝瀵瑰摢銆?/p> <p><br><strong>鎬葷粨<br></strong>Windows瀹屾垚绔彛涓嶭inux epoll鎶鏈柟妗堟槸榪?涓鉤鍙頒笂瀹炵幇寮傛IO鍜岃璁″紑鍙戜竴涓ぇ瀹歸噺錛屽叿鍙墿灞曟х殑winsock紼嬪簭鎸囨湇鍔$▼搴忕殑寰堝ソ鐨勯夋嫨錛屾湰鏂囧榪?涓妧鏈殑瀹炵幇鍘熺悊鍜屽疄闄呯殑浣跨敤鏂規(guī)硶鍋氫簡涓涓緇嗙殑浠嬬粛銆?/p><img src ="http://m.shnenglu.com/Panda/aggbug/95436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Panda/" target="_blank">ChinaPanda</a> 2009-09-06 22:23 <a href="http://m.shnenglu.com/Panda/archive/2009/09/06/95436.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://710191.com" target="_blank">亚洲乱码国产乱码精品精98午夜</a>| <a href="http://wy77777.com" target="_blank">韩国精品久久久999</a>| <a href="http://5418002.com" target="_blank">欧美日韩成人在线观看</a>| <a href="http://by27333.com" target="_blank">国产一区视频在线观看免费</a>| <a href="http://budanbao.com" target="_blank">亚洲天堂av在线免费</a>| <a href="http://710691.com" target="_blank">欧美国产丝袜视频</a>| <a href="http://5555547.com" target="_blank">欧美制服丝袜第一页</a>| <a href="http://337791.com" target="_blank">国产精品毛片va一区二区三区 </a>| <a href="http://www-442336.com" target="_blank">亚洲桃花岛网站</a>| <a href="http://m10669.com" target="_blank">亚洲国产成人av在线</a>| <a href="http://www-ty66.com" target="_blank">在线一区亚洲</a>| <a href="http://gaobb52.com" target="_blank">欧美日韩网址</a>| <a href="http://jsgf444.com" target="_blank">亚洲一区二区四区</a>| <a href="http://788111c.com" target="_blank">亚洲理伦电影</a>| <a href="http://senlin86.com" target="_blank">欧美揉bbbbb揉bbbbb</a>| <a href="http://chaoxibg.com" target="_blank">99亚洲伊人久久精品影院红桃</a>| <a href="http://042225.com" target="_blank">欧美激情按摩</a>| <a href="http://xtsjjw.com" target="_blank">欧美激情一区在线</a>| <a href="http://www18818.com" target="_blank">99精品99</a>| <a href="http://www-42189.com" target="_blank">亚洲美女在线一区</a>| <a href="http://5858yp.com" target="_blank">欧美成在线观看</a>| <a href="http://www344399.com" target="_blank">久久综合给合</a>| <a href="http://689657.com" target="_blank">亚洲精品在线一区二区</a>| <a href="http://www23sds.com" target="_blank">亚洲第一二三四五区</a>| <a href="http://www-57549.com" target="_blank">农夫在线精品视频免费观看</a>| <a href="http://tsjcmm.com" target="_blank">亚洲精品欧美在线</a>| <a href="http://www-733999.com" target="_blank">亚洲精品麻豆</a>| <a href="http://zgztby.com" target="_blank">国产精品久久久久免费a∨大胸</a>| <a href="http://ythbhg.com" target="_blank">亚洲综合色激情五月</a>| <a href="http://aqxiangtai.com" target="_blank">亚洲影院色无极综合</a>| <a href="http://521531.com" target="_blank">好看的日韩av电影</a>| <a href="http://shenshijuesheying.com" target="_blank">欧美1区3d</a>| <a href="http://681656.com" target="_blank">欧美日韩国产精品</a>| <a href="http://maomi998.com" target="_blank">亚洲男人av电影</a>| <a href="http://989766.com" target="_blank">午夜精品成人在线</a>| <a href="http://www993997.com" target="_blank">黑人一区二区三区四区五区</a>| <a href="http://guanghezixun.com" target="_blank">老司机精品导航</a>| <a href="http://1332233.com" target="_blank">欧美精品一区三区</a>| <a href="http://by66336.com" target="_blank">亚洲欧美国产毛片在线</a>| <a href="http://www13256.com" target="_blank">欧美一区二区三区免费视频</a>| <a href="http://916969.com" target="_blank">亚洲高清在线视频</a>| <a href="http://788997.com" target="_blank">日韩视频免费观看</a>| <a href="http://lucky5888.com" target="_blank">国产精品婷婷</a>| <a href="http://www524141.com" target="_blank">免费不卡在线观看av</a>| <a href="http://miandoctor.com" target="_blank">欧美黄色影院</a>| <a href="http://www381818.com" target="_blank">欧美亚洲一区二区在线</a>| <a href="http://hjersqc.com" target="_blank">久久人人爽人人爽爽久久</a>| <a href="http://wanzhixue.com" target="_blank">亚洲精品一区久久久久久</a>| <a href="http://jorhom.com" target="_blank">在线视频精品</a>| <a href="http://428820.com" target="_blank">在线观看日韩av先锋影音电影院</a>| <a href="http://www9ckk1.com" target="_blank">亚洲国产成人一区</a>| <a href="http://scqike.com" target="_blank">国产精品每日更新</a>| <a href="http://maomi998.com" target="_blank">免费高清在线一区</a>| <a href="http://cbb188.com" target="_blank">欧美三级日韩三级国产三级</a>| <a href="http://shalitao.com" target="_blank">久久精品99久久香蕉国产色戒</a>| <a href="http://668www.com" target="_blank">美女精品自拍一二三四</a>| <a href="http://613by.com" target="_blank">亚洲一区二区三区四区中文</a>| <a href="http://hh474.com" target="_blank">久久精品免费播放</a>| <a href="http://4480vv.com" target="_blank">亚洲视频网站在线观看</a>| <a href="http://ydy8.com" target="_blank">久久久www免费人成黑人精品 </a>| <a href="http://kuaikan97.com" target="_blank">在线精品观看</a>| <a href="http://xingmaokeji.com" target="_blank">中文日韩在线</a>| <a href="http://72nnnn.com" target="_blank">亚洲日本成人</a>| <a href="http://6688se.com" target="_blank">欧美一区视频</a>| <a href="http://y87b.com" target="_blank">国产精品99久久久久久人</a>| <a href="http://vpay1314.com" target="_blank">新狼窝色av性久久久久久</a>| <a href="http://xaipad.com" target="_blank">亚洲伦理网站</a>| <a href="http://sxhrsmjj.com" target="_blank">久久久久久久欧美精品</a>| <a href="http://ks180.com" target="_blank">亚洲在线观看免费</a>| <a href="http://787282.com" target="_blank">女人色偷偷aa久久天堂</a>| <a href="http://tzhsdy.com" target="_blank">久久精品国产亚洲一区二区</a>| <a href="http://4399360.com" target="_blank">欧美人在线观看</a>| <a href="http://booyitech.com" target="_blank">免费欧美高清视频</a>| <a href="http://hdsywang.com" target="_blank">国产精品无码永久免费888</a>| <a href="http://www39pao.com" target="_blank">亚洲福利国产</a>| <a href="http://dd8uau0ncu.com" target="_blank">韩日欧美一区</a>| <a href="http://bgflee.com" target="_blank">性伦欧美刺激片在线观看</a>| <a href="http://87ssyy.com" target="_blank">一本色道精品久久一区二区三区 </a>| <a href="http://gx2020.com" target="_blank">中文国产成人精品久久一</a>| <a href="http://17cao8.com" target="_blank">久久精品免费</a>| <a href="http://689558.com" target="_blank">久久久噜噜噜久久中文字免</a>| <a href="http://csmgxun.com" target="_blank">欧美日韩在线直播</a>| <a href="http://xiaobi13.com" target="_blank">最近中文字幕日韩精品</a>| <a href="http://www930666.com" target="_blank">在线免费观看视频一区</a>| <a href="http://guanghezixun.com" target="_blank">亚洲欧美久久久</a>| <a href="http://evaporsllc.com" target="_blank">亚洲一区欧美一区</a>| <a href="http://136hao.com" target="_blank">欧美日韩久久精品</a>| <a href="http://6677ch.com" target="_blank">亚洲精品久久久蜜桃</a>| <a href="http://zjkgjt.com" target="_blank">亚洲欧洲精品一区</a>| <a href="http://wwwavtb2049.com" target="_blank">久热精品在线</a>| <a href="http://hh474.com" target="_blank">欧美激情亚洲综合一区</a>| <a href="http://www068hs.com" target="_blank">1769国产精品</a>| <a href="http://cao2014.com" target="_blank">久久一综合视频</a>| <a href="http://337795.com" target="_blank">免费毛片一区二区三区久久久</a>| <a href="http://kdy444.com" target="_blank">狠狠狠色丁香婷婷综合久久五月</a>| <a href="http://japanjavbibi.com" target="_blank">亚洲欧美视频一区</a>| <a href="http://041935.com" target="_blank">欧美一区二区三区婷婷月色 </a>| <a href="http://5566kan.com" target="_blank">亚洲欧美中日韩</a>| <a href="http://pron12.com" target="_blank">亚洲欧美视频在线观看</a>| <a href="http://xhamtube.com" target="_blank">欧美三级网页</a>| <a href="http://xiaokd666.com" target="_blank">亚洲视频视频在线</a>| <a href="http://551692.com" target="_blank">亚洲欧美国产日韩中文字幕</a>| <a href="http://yeepey.com" target="_blank">欧美视频中文字幕在线</a>| <a href="http://339505.com" target="_blank">99亚洲视频</a>| <a href="http://959425.com" target="_blank">免费一级欧美片在线播放</a>| <a href="http://leohacks.com" target="_blank">国产精品日日做人人爱 </a>| <a href="http://520taose.com" target="_blank">久久精品亚洲一区二区三区浴池</a>| <a href="http://gx2020.com" target="_blank">久久av一区二区三区</a>| <a href="http://www381818.com" target="_blank">国产麻豆9l精品三级站</a>| <a href="http://lgaoxiao.com" target="_blank">午夜久久久久久</a>| <a href="http://shaijia123.com" target="_blank">久久久久久久成人</a>| <a href="http://320ur.com" target="_blank">18成人免费观看视频</a>| <a href="http://91sp136.com" target="_blank">农村妇女精品</a>| <a href="http://qimao360.com" target="_blank">夜夜嗨av一区二区三区四区</a>| <a href="http://leohacks.com" target="_blank">亚洲制服欧美中文字幕中文字幕</a>| <a href="http://339254.com" target="_blank">国产精品久久久免费</a>| <a href="http://hjersqc.com" target="_blank">亚洲欧美日韩国产成人</a>| <a href="http://fjccjq.com" target="_blank">久久青草福利网站</a>| <a href="http://66hhmm.com" target="_blank">亚洲国产另类 国产精品国产免费</a>| <a href="http://b1768.com" target="_blank">欧美/亚洲一区</a>| <a href="http://668334.com" target="_blank">亚洲精品美女免费</a>| <a href="http://juegold.com" target="_blank">亚洲欧美自拍偷拍</a>| <a href="http://921367.com" target="_blank">狠狠色狠狠色综合系列</a>| <a href="http://llyx888.com" target="_blank">免费不卡中文字幕视频</a>| <a href="http://www308eee.com" target="_blank">亚洲一级在线观看</a>| <a href="http://www35353.com" target="_blank">国产伦精品一区二区三区免费迷</a>| <a href="http://jjoo4.com" target="_blank">久久久噜噜噜久久久</a>| <a href="http://83wn.com" target="_blank">亚洲激情精品</a>| <a href="http://zz9876.com" target="_blank">欧美亚洲一级</a>| <a href="http://xxav2121.com" target="_blank">亚洲欧洲精品一区二区三区波多野1战4</a>| <a href="http://www-440450.com" target="_blank">欧美多人爱爱视频网站</a>| <a href="http://my777752.com" target="_blank">亚洲一区激情</a>| <a href="http://18loutv.com" target="_blank">免费h精品视频在线播放</a>| <a href="http://pp88qq.com" target="_blank">在线视频欧美日韩精品</a>| <a href="http://shanghaijiagu.com" target="_blank">国产精品久久久久三级</a>| <a href="http://caofujia.com" target="_blank">玖玖玖国产精品</a>| <a href="http://080177.com" target="_blank">一区二区三区四区五区精品</a>| <a href="http://8013sf.com" target="_blank">久久免费精品视频</a>| <a href="http://wwwn94.com" target="_blank">日韩午夜电影av</a>| <a href="http://www44448.com" target="_blank">国产视频一区在线观看</a>| <a href="http://ythbhg.com" target="_blank">欧美激情第六页</a>| <a href="http://9924338.com" target="_blank">午夜激情一区</a>| <a href="http://ziwufuren.com" target="_blank">亚洲综合第一</a>| <a href="http://noeljgq.com" target="_blank">亚洲国产岛国毛片在线</a>| <a href="http://4466777.com" target="_blank">国产精品国产福利国产秒拍</a>| <a href="http://66y3.com" target="_blank">欧美伊久线香蕉线新在线</a>| <a href="http://cmtqd.com" target="_blank">91久久综合</a>| <a href="http://jiyixitong.com" target="_blank">久久手机精品视频</a>| <a href="http://pp88qq.com" target="_blank">亚洲欧美成人精品</a>| <a href="http://7749137.com" target="_blank">亚洲精品乱码久久久久久久久</a>| <a href="http://wwwwy9001.com" target="_blank">国产日韩精品一区观看</a>| <a href="http://khc83.com" target="_blank">欧美日韩免费观看一区三区 </a>| <a href="http://215920.com" target="_blank">亚洲精品在线免费</a>| <a href="http://15149cc.com" target="_blank">久久青草久久</a>| <a href="http://566805.com" target="_blank">欧美伊人久久久久久午夜久久久久</a>| <a href="http://ww9494.com" target="_blank">亚洲国产视频直播</a>| <a href="http://sd-12530.com" target="_blank">国产亚洲成av人在线观看导航</a>| <a href="http://tingxihuan.com" target="_blank">欧美日韩激情小视频</a>| <a href="http://ssni888.com" target="_blank">另类激情亚洲</a>| <a href="http://621765.com" target="_blank">久久精品一级爱片</a>| <a href="http://x1317.com" target="_blank">亚洲一区久久久</a>| <a href="http://66gg6.com" target="_blank">日韩午夜在线</a>| <a href="http://er65.com" target="_blank">亚洲电影在线免费观看</a>| <a href="http://649929.com" target="_blank">久久综合福利</a>| <a href="http://0070571.com" target="_blank">欧美在线看片</a>| <a href="http://p54y.com" target="_blank">欧美一级一区</a>| <a href="http://xtsjjw.com" target="_blank">亚洲一区二三</a>| <a href="http://av0333.com" target="_blank">99精品黄色片免费大全</a>| <a href="http://951738.com" target="_blank">亚洲高清不卡av</a>| <a href="http://91nbs.com" target="_blank">国外视频精品毛片</a>| <a href="http://cfqcgw.com" target="_blank">国产午夜精品美女视频明星a级 </a>| <a href="http://88xjj.com" target="_blank">国产精品视频免费观看</a>| <a href="http://737sihu.com" target="_blank">欧美日韩国产成人高清视频</a>| <a href="http://www333393.com" target="_blank">欧美丰满少妇xxxbbb</a>| <a href="http://wwwhaodd116.com" target="_blank">久久久久国产精品www</a>| <a href="http://6673328.com" target="_blank">午夜视频在线观看一区二区</a>| <a href="http://win-mdk.com" target="_blank">亚洲一区二区三区欧美</a>| <a href="http://tigerpowerinc.com" target="_blank">一区二区三区日韩在线观看</a>| <a href="http://wwwcao88.com" target="_blank">亚洲最新在线视频</a>| <a href="http://www-11688.com" target="_blank">亚洲日本在线视频观看</a>| <a href="http://9927tv.com" target="_blank">亚洲国产欧美一区二区三区久久</a>| <a href="http://qiaoka526.com" target="_blank">老司机aⅴ在线精品导航</a>| <a href="http://yhc26.com" target="_blank">久久午夜羞羞影院免费观看</a>| <a href="http://862323.com" target="_blank">久久久久久香蕉网</a>| <a href="http://yys4.com" target="_blank">久久精品成人一区二区三区</a>| <a href="http://hafenchen.com" target="_blank">欧美呦呦网站</a>| <a href="http://www-n77.com" target="_blank">久久久久国产精品人</a>| <a href="http://556995.com" target="_blank">久久久在线视频</a>| <a href="http://327099.com" target="_blank">猛男gaygay欧美视频</a>| <a href="http://3dxxoo.com" target="_blank">欧美粗暴jizz性欧美20</a>| <a href="http://shalitao.com" target="_blank">亚洲第一毛片</a>| <a href="http://rljyy.com" target="_blank">久久久av毛片精品</a>| <a href="http://mengmujia.com" target="_blank">久久精品国产久精国产爱</a>| <a href="http://korean-edu.com" target="_blank">久久精品亚洲精品国产欧美kt∨</a>| <a href="http://77017w.com" target="_blank">久久九九全国免费精品观看</a>| <a href="http://aa56789.com" target="_blank">久久久久久久久久久久久久一区</a>| <a href="http://by722777.com" target="_blank">久久亚洲春色中文字幕</a>| <a href="http://987328.com" target="_blank">欧美高清视频</a>| <a href="http://www-55125.com" target="_blank">夜夜嗨av一区二区三区网页</a>| <a href="http://www50050.com" target="_blank">小黄鸭视频精品导航</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>