涓涓Winsock 瀹屾垚绔彛妯″瀷灏佽鐨勭被
鍙戝竷: 2008-6-26 12:23 | 浣滆: admin | 鏌ョ湅: 66娆
绋嬪簭杩愯鏁堟灉鎴浘:

鍦╓INDOWS涓嬭繘琛岀綉缁滄湇鍔$绋嬪簭寮鍙戯紝姣棤鐤戦棶锛學insock 瀹屾垚绔彛妯″瀷鏄渶楂樻晥鐨勩俉insock鐨勫畬鎴愮鍙fā鍨嬪熷姪Widnows鐨勯噸鍙營O鍜屽畬鎴愮鍙f潵瀹炵幇锛屽畬鎴愮鍙fā鍨嬫噦浜嗕箣鍚庢槸姣旇緝绠鍗曠殑锛屼絾鏄鎯虫帉鎻insock瀹屾垚绔彛妯″瀷锛岄渶瑕佸WINDOWS涓嬬殑绾跨▼銆佺嚎绋嬪悓姝ワ紝Winsock API浠ュ強WINDOWS IO鏈哄埗鏈変竴瀹氱殑浜嗚В銆傚鏋滀笉浜嗚В锛屾帹鑽愬嚑鏈功锛氥奍nside Windows 2000锛屻奧INDOWS鏍稿績缂栫▼銆嬶紝銆奧IN32澶氱嚎绋嬬▼搴忚璁°嬨併奧INDOWS缃戠粶缂栫▼鎶鏈嬨傚湪鍘诲勾锛屾垜鍦–璇█涓嬬敤瀹屾垚绔彛妯″瀷鍐欎簡涓涓猈EBSERVER锛屽墠浜涘ぉ锛屾垜鍐冲畾鐢–++閲嶅啓杩欎釜WEBSERVER锛岀粰杩欎釜WEBSERVER澧炲姞浜嗕竴浜涘姛鑳斤紝骞舵敼杩涘畬鎴愮鍙f搷浣滄柟娉曪紝姣斿閲囩敤AcceptEx鏉ヤ唬鏇縜ccept鍜屼娇鐢↙OOKASIDE LIST鏉ョ鐞嗗唴瀛橈紝浣垮緱WEBSERVER鐨勬ц兘鏈変簡姣旇緝澶х殑鎻愰珮銆
鍦ㄩ噸鍐欑殑寮濮嬶紝鎴戝喅瀹氭妸瀹屾垚绔彛妯″瀷灏佽鎴愪竴涓瘮杈冮氱敤鐨凜++绫伙紝閽堝鍚勭缃戠粶鏈嶅姟绔▼搴忕殑寮鍙戯紝鍙绠鍗曞湴缁ф壙杩欎釜绫伙紝鏀瑰啓鍏朵腑涓や釜铏氭嫙鍑芥暟灏辫兘婊¤冻鍚勭闇瑕併傚埌鏄ㄥぉ涓烘锛學EBSERVER閲嶅啓瀹屾瘯锛屾垜灏卞啓浜嗚繖绡囨枃绔犲瀹屾垚绔彛妯″瀷鍋氫竴涓荤粨锛屽苟浠嬬粛涓涓嬫垜鐨勮繖涓被銆
涓锛氬畬鎴愮鍙fā鍨
鑷充簬瀹屾垚绔彛鍜學insock瀹屾垚绔彛妯″瀷鐨勮缁嗕粙缁嶏紝璇峰弬瑙佹垜涓婇潰浠嬬粛鐨勯偅鍑犳湰涔︼紝杩欓噷鍙槸鎴戜釜浜哄瀹屾垚绔彛妯″瀷鐞嗚В鐨勪竴鐐瑰績寰椼
棣栧厛鎴戜滑瑕佹娊璞″嚭涓涓畬鎴愮鍙eぇ姒傜殑澶勭悊娴佺▼锛
1锛氬垱寤轰竴涓畬鎴愮鍙c
2锛氬垱寤轰竴涓嚎绋婣銆
3锛欰绾跨▼寰幆璋冪敤GetQueuedCompletionStatus()鍑芥暟鏉ュ緱鍒癐O鎿嶄綔缁撴灉锛岃繖涓嚱鏁版槸涓樆濉炲嚱鏁般
4锛氫富绾跨▼寰幆閲岃皟鐢╝ccept绛夊緟瀹㈡埛绔繛鎺ヤ笂鏉ャ
5锛氫富绾跨▼閲宎ccept杩斿洖鏂拌繛鎺ュ缓绔嬩互鍚庯紝鎶婅繖涓柊鐨勫鎺ュ瓧鍙ユ焺鐢–reateIoCompletionPort鍏宠仈鍒板畬鎴愮鍙o紝鐒跺悗鍙戝嚭涓涓紓姝ョ殑WSASend鎴栬匴SARecv璋冪敤锛屽洜涓烘槸寮傛鍑芥暟锛學SASend/WSARecv浼氶┈涓婅繑鍥烇紝瀹為檯鐨勫彂閫佹垨鑰呮帴鏀舵暟鎹殑鎿嶄綔鐢盬INDOWS绯荤粺鍘诲仛銆
6锛氫富绾跨▼缁х画涓嬩竴娆″惊鐜紝闃诲鍦╝ccept杩欓噷绛夊緟瀹㈡埛绔繛鎺ャ
7锛歐INDOWS绯荤粺瀹屾垚WSASend鎴栬匴SArecv鐨勬搷浣滐紝鎶婄粨鏋滃彂鍒板畬鎴愮鍙c
8锛欰绾跨▼閲岀殑GetQueuedCompletionStatus()椹笂杩斿洖锛屽苟浠庡畬鎴愮鍙e彇寰楀垰瀹屾垚鐨刉SASend/WSARecv鐨勭粨鏋溿
9锛氬湪A绾跨▼閲屽杩欎簺鏁版嵁杩涜澶勭悊(濡傛灉澶勭悊杩囩▼寰堣楁椂锛岄渶瑕佹柊寮绾跨▼澶勭悊)锛岀劧鍚庢帴鐫鍙戝嚭WSASend/WSARecv锛屽苟缁х画涓嬩竴娆″惊鐜樆濉炲湪GetQueuedCompletionStatus()杩欓噷銆
鍏蜂綋鐨勬祦绋嬭鐪嬮檮鍥撅紝鍏朵腑绾㈢嚎琛ㄧず鏄疻INDOWS绯荤粺杩涜鐨勫鐞嗭紝涓嶉渶瑕佹垜浠▼搴忓共棰勩
褰掓牴鍒板簳姒傛嫭瀹屾垚绔彛妯″瀷涓鍙ヨ瘽锛
鎴戜滑涓嶅仠鍦板彂鍑哄紓姝ョ殑WSASend/WSARecv IO鎿嶄綔锛屽叿浣撶殑IO澶勭悊杩囩▼鐢盬INDOWS绯荤粺瀹屾垚锛學INDOWS绯荤粺瀹屾垚瀹為檯鐨処O澶勭悊鍚庯紝鎶婄粨鏋滈佸埌瀹屾垚绔彛涓婏紙濡傛灉鏈夊涓狪O閮藉畬鎴愪簡锛岄偅涔堝氨鍦ㄥ畬鎴愮鍙i偅閲屾帓鎴愪竴涓槦鍒楋級銆傛垜浠湪鍙﹀涓涓嚎绋嬮噷浠庡畬鎴愮鍙d笉鏂湴鍙栧嚭IO鎿嶄綔缁撴灉锛岀劧鍚庢牴鎹渶瑕佸啀鍙戝嚭WSASend/WSARecv IO鎿嶄綔銆
浜岋細鎻愰珮瀹屾垚绔彛鏁堢巼鐨勫嚑绉嶆湁鏁堟柟娉
1锛氫娇鐢ˋcceptEx浠f浛accept銆侫cceptEx鍑芥暟鏄井杞殑Winsosk 鎵╁睍鍑芥暟锛岃繖涓嚱鏁板拰accept鐨勫尯鍒氨鏄細accept鏄樆濉炵殑锛屼竴鐩磋鍒版湁瀹㈡埛绔繛鎺ヤ笂鏉ュ悗accept鎵嶈繑鍥烇紝鑰孉cceptEx鏄紓姝ョ殑锛岀洿鎺ュ氨杩斿洖浜嗭紝鎵浠ユ垜浠埄鐢ˋcceptEx鍙互鍙戝嚭澶氫釜AcceptEx璋冪敤
绛夊緟瀹㈡埛绔繛鎺ャ傚彟澶栵紝濡傛灉鎴戜滑鍙互棰勮鍒板鎴风涓杩炴帴涓婃潵鍚庡氨浼氬彂閫佹暟鎹紙姣斿WEBSERVER鐨勫鎴风娴忚鍣級锛岄偅涔堝彲浠ラ殢鐫AcceptEx鎶曢掍竴涓狟UFFER杩涘幓锛岃繖鏍疯繛鎺ヤ竴寤虹珛鎴愬姛锛屽氨鍙互鎺ユ敹瀹㈡埛绔彂鍑虹殑鏁版嵁鍒癇UFFER閲岋紝杩欐牱浣跨敤鐨勮瘽锛屼竴娆cceptEx璋冪敤鐩稿綋浜巃ccpet鍜宺ecv鐨勪竴娆¤繛缁皟鐢ㄣ傚悓鏃讹紝寰蒋鐨勫嚑涓墿灞曞嚱鏁伴拡瀵规搷浣滅郴缁熶紭鍖栬繃锛屾晥鐜囦紭浜嶹INSOCK 鐨勬爣鍑咥PI鍑芥暟銆
2锛氬湪濂楁帴瀛椾笂浣跨敤SO_RCVBUF鍜孲O_SNDBUF閫夐」鏉ュ叧闂郴缁熺紦鍐插尯銆傝繖涓柟娉曡浠佽鏅猴紝璇︾粏鐨勪粙缁嶅彲浠ュ弬鑰冦奧INDOWS鏍稿績缂栫▼銆嬬9绔犮傝繖閲屼笉鍋氳缁嗕粙缁嶏紝鎴戝皝瑁呯殑绫讳腑涔熸病鏈変娇鐢ㄨ繖涓柟娉曘
3锛氬唴瀛樺垎閰嶆柟娉曘傚洜涓烘瘡娆′负涓涓柊寤虹珛鐨勫鎺ュ瓧閮借鍔ㄦ佸垎閰嶄竴涓滃崟IO鏁版嵁鈥濆拰鈥滃崟鍙ユ焺鏁版嵁鈥濈殑鏁版嵁缁撴瀯锛岀劧鍚庡湪濂楁帴瀛楀叧闂殑鏃跺欓噴鏀撅紝杩欐牱濡傛灉鏈夋垚鍗冧笂涓囦釜瀹㈡埛棰戠箒杩炴帴鏃跺欙紝浼氫娇寰楃▼搴忓緢澶氬紑閿鑺辫垂鍦ㄥ唴瀛樺垎閰嶅拰閲婃斁涓娿傝繖閲屾垜浠彲浠ヤ娇鐢╨ookaside list銆傚紑濮嬪湪寰蒋鐨刾latform sdk閲岀殑SAMPLE閲岀湅鍒發ookaside list锛屾垜涓鐐逛笉鏄庣櫧锛孧SDN閲屾湁娌℃湁銆傚悗鏉ヨ繕鏄湪DDK鐨勬枃妗d腑鎵惧埌浜嗭紝锛
lookaside list
A system-managed queue from which entries of a fixed size can be allocated and into which entries can be deallocated dynamically. Callers of the Ex(ecutive) Support lookaside list routines can use a lookaside list to manage any dynamically sized set of fixed-size buffers or structures with caller-determined contents.
For example, the I/O Manager uses a lookaside for fast allocation and deallocation of IRPs and MDLs. As another example, some of the system-supplied SCSI class drivers use lookaside lists to allocate and release memory for SRBs.
lookaside list鍚嶅瓧姣旇緝鍙ゆ紙涔熻鏄垜瀛ら檵瀵¢椈锛岀涓娆$湅鍒帮級锛屽叾瀹炲氨鏄竴绉嶅唴瀛樼鐞嗘柟娉曪紝鍜屽唴瀛樻睜浣跨敤鏂规硶绫讳技銆傛垜涓汉鐨勭悊瑙o細灏辨槸涓涓崟閾捐〃銆傛瘡娆¤鍒嗛厤鍐呭瓨鍓嶏紝鍏堟煡鐪嬭繖涓摼琛ㄦ槸鍚︿负绌猴紝濡傛灉涓嶄负绌猴紝灏变粠杩欎釜閾捐〃涓В涓嬩竴涓粨鐐癸紝鍒欎笉闇瑕佹柊鍒嗛厤銆傚鏋滀负绌猴紝鍐嶅姩鎬佸垎閰嶃備娇鐢ㄥ畬鎴愬悗锛屾妸杩欎釜鏁版嵁缁撴瀯涓嶉噴鏀撅紝鑰屾槸鎶婂畠鎻掑叆鍒伴摼琛ㄤ腑鍘伙紝浠ヤ究涓嬩竴娆′娇鐢ㄣ傝繖鏍风浉姣旀晥鐜囧氨楂樹簡寰堝銆傚湪鎴戠殑绋嬪簭涓紝鎴戝氨浣跨敤浜嗚繖绉嶅崟閾捐〃鏉ョ鐞嗐




发表于 2009-1-5 19:48
| 











