锘??xml version="1.0" encoding="utf-8" standalone="yes"?>老司机成人在线视频,亚洲国产成人久久综合一区,国产精品网站在线http://m.shnenglu.com/API/category/16122.htmlzh-cnTue, 12 Dec 2017 03:06:12 GMTTue, 12 Dec 2017 03:06:12 GMT60濂楁帴瀛梤ead/write榪斿洖鍊?/title><link>http://m.shnenglu.com/API/archive/2017/12/12/215420.html</link><dc:creator>C++鎶鏈腑蹇?/dc:creator><author>C++鎶鏈腑蹇?/author><pubDate>Tue, 12 Dec 2017 02:32:00 GMT</pubDate><guid>http://m.shnenglu.com/API/archive/2017/12/12/215420.html</guid><wfw:comment>http://m.shnenglu.com/API/comments/215420.html</wfw:comment><comments>http://m.shnenglu.com/API/archive/2017/12/12/215420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/API/comments/commentRss/215420.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/API/services/trackbacks/215420.html</trackback:ping><description><![CDATA[<p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">1銆侀樆濉炴ā寮忎笌闈為樆濉炴ā寮忎笅recv鐨勮繑鍥炲煎悇浠h〃浠涔堟剰鎬濓紵鏈夋病鏈夊尯鍒紵錛堝氨鎴戠洰鍓嶄簡瑙i樆濉炰笌闈為樆濉瀝ecv榪斿洖鍊兼病鏈夊尯鍒嗭紝閮芥槸 <0錛氬嚭閿欙紝=0錛氳繛鎺ュ叧闂紝>0鎺ユ敹鍒版暟鎹ぇ灝忥紝鐗瑰埆錛氳繑鍥炲?nbsp;<0鏃跺茍涓?errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)鐨勬儏鍐典笅璁や負榪炴帴鏄甯哥殑錛岀戶緇帴鏀躲傚彧鏄樆濉炴ā寮忎笅recv浼氶樆濉炵潃鎺ユ敹鏁版嵁錛岄潪闃誨妯″紡涓嬪鏋滄病鏈夋暟鎹細榪斿洖錛屼笉浼氶樆濉炵潃璇伙紝鍥犳闇瑕?nbsp;寰幆璇誨彇</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">2銆侀樆濉炴ā寮忎笌闈為樆濉炴ā寮忎笅write鐨勮繑鍥炲煎悇浠h〃浠涔堟剰鎬濓紵鏈夋病鏈夊尯鍒紵</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">闃誨涓庨潪闃誨write榪斿洖鍊兼病鏈夊尯鍒嗭紝閮芥槸 <0錛氬嚭閿欙紝=0錛氳繛鎺ュ叧闂紝>0鍙戦佹暟鎹ぇ灝忥紝鐗瑰埆錛氳繑鍥炲?nbsp;<0鏃跺茍涓?errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)鐨勬儏鍐典笅璁や負榪炴帴鏄甯哥殑錛岀戶緇彂閫併傚彧鏄樆濉炴ā寮忎笅write浼氶樆濉炵潃鍙戦佹暟鎹紝闈為樆濉炴ā寮忎笅濡傛灉鏆傛椂鏃犳硶鍙戦佹暟鎹細榪斿洖錛屼笉浼氶樆濉炵潃 write錛屽洜姝ら渶瑕佸驚鐜彂閫?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">3銆侀樆濉炴ā寮忎笅read榪斿洖鍊?nbsp;< 0 && errno != EINTR && errno != EWOULDBLOCK && errno != EAGAIN鏃訛紝榪炴帴寮傚父錛岄渶瑕佸叧闂紝read榪斿洖鍊?nbsp;< 0 && (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)鏃惰〃紺烘病鏈夋暟鎹紝闇瑕佺戶緇帴鏀訛紝濡傛灉榪斿洖鍊煎ぇ浜?琛ㄧず鎺ラ佸埌鏁版嵁銆?nbsp;</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">闈為樆濉炴ā寮忎笅read榪斿洖鍊?nbsp;< 0琛ㄧず娌℃湁鏁版嵁錛? 0琛ㄧず榪炴帴鏂紑錛?gt; 0琛ㄧず鎺ユ敹鍒版暟鎹?nbsp;</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">榪?縐嶆ā寮忎笅鐨勮繑鍥炲兼槸涓嶆槸榪欎箞鐞嗚В錛屾湁娌℃湁璺熻緇嗙殑鐞嗚В鎴栬窡鍑嗙‘鐨勮鏄庯紵 </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">4銆侀樆濉炴ā寮忎笌闈為樆濉炴ā寮忎笅鏄惁send榪斿洖鍊?nbsp;< 0 && (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)琛ㄧず鏆傛椂鍙戦佸け璐ワ紝闇瑕侀噸璇曪紝濡傛灉send榪斿洖鍊?nbsp;<= 0, && errno != EINTR && errno != EWOULDBLOCK && errno != EAGAIN鏃訛紝榪炴帴寮傚父錛岄渶瑕佸叧闂紝濡傛灉send榪斿洖鍊?nbsp;> 0鍒欒〃紺哄彂閫佷簡鏁版嵁錛焥end鐨勮繑鍥炲兼槸鍚﹁繖涔堢悊瑙o紝闃誨妯″紡涓庨潪闃誨妯″紡涓媠end榪斿洖鍊?0鏄惁閮芥槸鍙戦佸け璐ワ紝榪樻槸閭d釜妯″紡涓嬭〃紺烘殏鏃朵笉鍙彂閫侊紝闇瑕?nbsp;閲嶅彂錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">1. send鍑芥暟</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">int send( SOCKET s, const char FAR *buf, int len, int flags );  </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">涓嶈鏄鎴風榪樻槸鏈嶅姟鍣ㄧ搴旂敤紼嬪簭閮界敤send鍑芥暟鏉ュ悜TCP榪炴帴鐨勫彟涓绔彂閫佹暟鎹?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">瀹㈡埛绔▼搴忎竴鑸敤send鍑芥暟鍚戞湇鍔″櫒鍙戦佽姹傦紝鑰屾湇鍔″櫒鍒欓氬父鐢╯end鍑芥暟鏉ュ悜瀹㈡埛紼嬪簭鍙戦佸簲絳斻?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">璇ュ嚱鏁扮殑錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎竴涓弬鏁版寚瀹氬彂閫佺濂楁帴瀛楁弿榪扮錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎簩涓弬鏁版寚鏄庝竴涓瓨鏀懼簲鐢ㄧ▼搴忚鍙戦佹暟鎹殑緙撳啿鍖猴紱</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎笁涓弬鏁版寚鏄庡疄闄呰鍙戦佺殑鏁版嵁鐨勫瓧鑺傛暟錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎洓涓弬鏁頒竴鑸疆0銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">榪欓噷鍙弿榪板悓姝ocket鐨剆end鍑芥暟鐨勬墽琛屾祦紼嬨傚綋璋冪敤璇ュ嚱鏁版椂錛宻end鍏堟瘮杈冨緟鍙戦佹暟鎹殑闀垮害len鍜屽鎺ュ瓧s鐨勫彂閫佺紦鍐茬殑闀垮害錛屽鏋渓en澶т簬s鐨勫彂閫佺紦鍐插尯鐨勯暱搴︼紝璇ュ嚱鏁拌繑鍥濻OCKET_ERROR錛涘鏋渓en灝忎簬鎴栬呯瓑浜巗鐨勫彂閫佺紦鍐插尯鐨勯暱搴︼紝閭d箞send鍏堟鏌ュ崗璁?nbsp;鏄惁姝e湪鍙戦乻鐨勫彂閫佺紦鍐蹭腑鐨勬暟鎹紝濡傛灉鏄氨絳夊緟鍗忚鎶婃暟鎹彂閫佸畬錛屽鏋滃崗璁繕娌℃湁寮濮嬪彂閫乻鐨勫彂閫佺紦鍐蹭腑鐨勬暟鎹垨鑰卻鐨勫彂閫佺紦鍐蹭腑娌℃湁鏁版嵁錛岄偅涔?nbsp;send灝辨瘮杈僺鐨勫彂閫佺紦鍐插尯鐨勫墿浣欑┖闂村拰len錛屽鏋渓en澶т簬鍓╀綑絀洪棿澶у皬send灝變竴鐩寸瓑寰呭崗璁妸s鐨勫彂閫佺紦鍐蹭腑鐨勬暟鎹彂閫佸畬錛屽鏋渓en灝忎簬鍓╀綑 絀洪棿澶у皬send灝變粎浠呮妸buf涓殑鏁版嵁copy鍒板墿浣欑┖闂撮噷錛?span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #000000;">娉ㄦ剰騫朵笉鏄痵end</span>鎶妔鐨勫彂閫佺紦鍐蹭腑鐨勬暟鎹紶鍒拌繛鎺ョ殑鍙︿竴绔殑錛岃屾槸鍗忚浼犵殑錛宻end浠呬粎鏄妸buf涓殑鏁版嵁copy鍒皊鐨勫彂閫佺紦鍐插尯鐨勫墿浣欑┖闂撮噷<span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #000000;">錛夈?/span>濡傛灉send鍑芥暟copy鏁版嵁鎴愬姛錛屽氨榪斿洖瀹為檯copy鐨勫瓧鑺傛暟錛屽鏋渟end鍦╟opy鏁版嵁鏃跺嚭鐜伴敊璇紝閭d箞send灝辮繑鍥濻OCKET_ERROR錛涘鏋渟end鍦ㄧ瓑寰呭崗璁紶閫佹暟鎹椂緗戠粶鏂紑鐨勮瘽錛岄偅涔坰end鍑芥暟涔熻繑鍥濻OCKET_ERROR銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #000000;">瑕佹敞鎰弒end</span>鍑芥暟鎶奲uf涓殑鏁版嵁鎴愬姛copy鍒皊鐨勫彂閫佺紦鍐茬殑鍓╀綑絀洪棿閲屽悗瀹冨氨榪斿洖浜嗭紝浣嗘槸姝ゆ椂榪欎簺鏁版嵁騫朵笉涓瀹氶┈涓婅浼犲埌榪炴帴鐨勫彟涓绔?span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #000000;">銆?/span>濡傛灉鍗忚鍦ㄥ悗緇殑浼犻佽繃紼嬩腑鍑虹幇緗戠粶閿欒鐨勮瘽錛岄偅涔堜笅涓涓猄ocket鍑芥暟灝變細榪斿洖SOCKET_ERROR銆傦紙姣忎竴涓櫎send澶栫殑Socket鍑芥暟鍦ㄦ墽 琛岀殑鏈寮濮嬫昏鍏堢瓑寰呭鎺ュ瓧鐨勫彂閫佺紦鍐蹭腑鐨勬暟鎹鍗忚浼犻佸畬姣曟墠鑳界戶緇紝濡傛灉鍦ㄧ瓑寰呮椂鍑虹幇緗戠粶閿欒錛岄偅涔堣Socket鍑芥暟灝辮繑鍥?nbsp;SOCKET_ERROR錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">娉ㄦ剰錛氬湪Unix緋葷粺涓嬶紝濡傛灉send鍦ㄧ瓑寰呭崗璁紶閫佹暟鎹椂緗戠粶鏂紑鐨勮瘽錛岃皟鐢╯end鐨勮繘紼嬩細鎺ユ敹鍒頒竴涓猄IGPIPE淇″彿錛岃繘紼嬪璇ヤ俊鍙風殑榛樿澶勭悊鏄繘紼嬬粓姝€?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">Send鍑芥暟鐨勮繑鍥炲兼湁涓夌被錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">錛?錛夎繑鍥炲?0錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">錛?錛夎繑鍥炲?lt;0錛氬彂閫佸け璐ワ紝閿欒鍘熷洜瀛樹簬鍏ㄥ眬鍙橀噺errno涓?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">錛?錛夎繑鍥炲?gt;0錛氳〃紺哄彂閫佺殑瀛楄妭鏁幫紙瀹為檯涓婃槸鎷瘋礉鍒板彂閫佺紦鍐蹭腑鐨勫瓧鑺傛暟錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">閿欒浠g爜錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">EBADF 鍙傛暟s 闈炲悎娉曠殑socket澶勭悊浠g爜銆?br style="box-sizing: border-box;" />EFAULT 鍙傛暟涓湁涓鎸囬拡鎸囧悜鏃犳硶瀛樺彇鐨勫唴瀛樼┖闂?br style="box-sizing: border-box;" />ENOTSOCK 鍙傛暟s涓轟竴鏂囦歡鎻忚堪璇嶏紝闈瀞ocket銆?br style="box-sizing: border-box;" />EINTR 琚俊鍙鋒墍涓柇銆?br style="box-sizing: border-box;" />EAGAIN 姝ゆ搷浣滀細浠よ繘紼嬮樆鏂紝浣嗗弬鏁皊鐨剆ocket涓轟笉鍙樆鏂?br style="box-sizing: border-box;" />ENOBUFS 緋葷粺鐨勭紦鍐插唴瀛樹笉瓚?br style="box-sizing: border-box;" />ENOMEM 鏍稿績鍐呭瓨涓嶈凍<br style="box-sizing: border-box;" />EINVAL 浼犵粰緋葷粺璋冪敤鐨勫弬鏁頒笉姝g‘銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">2.  recv鍑芥暟</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">int recv( SOCKET s,     char FAR *buf,      int len,     int flags     );   </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">涓嶈鏄鎴風榪樻槸鏈嶅姟鍣ㄧ搴旂敤紼嬪簭閮界敤recv鍑芥暟浠嶵CP榪炴帴鐨勫彟涓绔帴鏀舵暟鎹?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">璇ュ嚱鏁扮殑錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎竴涓弬鏁版寚瀹氭帴鏀剁濂楁帴瀛楁弿榪扮錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎簩涓弬鏁版寚鏄庝竴涓紦鍐插尯錛岃緙撳啿鍖虹敤鏉ュ瓨鏀緍ecv鍑芥暟鎺ユ敹鍒扮殑鏁版嵁錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎笁涓弬鏁版寚鏄巄uf鐨勯暱搴︼紱</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎洓涓弬鏁頒竴鑸疆0銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">榪欓噷鍙弿榪板悓姝ocket鐨剅ecv鍑芥暟鐨勬墽琛屾祦紼嬨傚綋搴旂敤紼嬪簭璋冪敤recv鍑芥暟鏃訛紝recv鍏堢瓑寰卻鐨勫彂閫佺紦鍐?nbsp;涓殑鏁版嵁琚崗璁紶閫佸畬姣曪紝濡傛灉鍗忚鍦ㄤ紶閫乻鐨勫彂閫佺紦鍐蹭腑鐨勬暟鎹椂鍑虹幇緗戠粶閿欒錛岄偅涔坮ecv鍑芥暟榪斿洖SOCKET_ERROR錛屽鏋渟鐨勫彂閫佺紦鍐蹭腑娌℃湁鏁?nbsp;鎹垨鑰呮暟鎹鍗忚鎴愬姛鍙戦佸畬姣曞悗錛宺ecv鍏堟鏌ュ鎺ュ瓧s鐨勬帴鏀剁紦鍐插尯錛屽鏋渟鎺ユ敹緙撳啿鍖轟腑娌℃湁鏁版嵁鎴栬呭崗璁鍦ㄦ帴鏀舵暟鎹紝閭d箞recv灝變竴鐩寸瓑寰咃紝鍙埌 鍗忚鎶婃暟鎹帴鏀跺畬姣曘傚綋鍗忚鎶婃暟鎹帴鏀跺畬姣曪紝recv鍑芥暟灝辨妸s鐨勬帴鏀剁紦鍐蹭腑鐨勬暟鎹甤opy鍒癰uf涓紙<span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #000000;">娉ㄦ剰鍗忚鎺ユ敹鍒扮殑鏁版嵁鍙兘澶т簬buf</span>鐨勯暱搴︼紝鎵浠?nbsp;鍦ㄨ繖縐嶆儏鍐典笅瑕佽皟鐢ㄥ嚑嬈ecv鍑芥暟鎵嶈兘鎶妔鐨勬帴鏀剁紦鍐蹭腑鐨勬暟鎹甤opy瀹屻俽ecv鍑芥暟浠呬粎鏄痗opy鏁版嵁錛岀湡姝g殑鎺ユ敹鏁版嵁鏄崗璁潵瀹屾垚鐨勶級錛宺ecv鍑芥暟榪斿洖鍏跺疄闄卌opy鐨勫瓧鑺傛暟銆傚鏋渞ecv鍦╟opy鏃跺嚭閿欙紝閭d箞瀹冭繑鍥濻OCKET_ERROR錛涘鏋渞ecv鍑芥暟鍦ㄧ瓑寰呭崗璁帴鏀舵暟鎹椂緗戠粶涓柇浜嗭紝閭d箞瀹冭繑鍥?銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">娉ㄦ剰錛氬湪Unix緋葷粺涓嬶紝濡傛灉recv鍑芥暟鍦ㄧ瓑寰呭崗璁帴鏀舵暟鎹椂緗戠粶鏂紑浜嗭紝閭d箞璋冪敤recv鐨勮繘紼嬩細鎺ユ敹鍒頒竴涓猄IGPIPE淇″彿錛岃繘紼嬪璇ヤ俊鍙風殑榛樿澶勭悊鏄繘紼嬬粓姝€?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">榛樿鎯呭喌涓媠ocket鏄樆濉炵殑銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">闃誨涓庨潪闃誨recv榪斿洖鍊兼病鏈夊尯鍒紝閮芥槸錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><0 鍑洪敊</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">=0 瀵規柟璋冪敤浜哻lose API鏉ュ叧闂繛鎺?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">>0 鎺ユ敹鍒扮殑鏁版嵁澶у皬錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">鐗瑰埆鍦幫細榪斿洖鍊?lt;0鏃跺茍涓?errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)鐨勬儏鍐典笅璁や負榪炴帴鏄甯哥殑錛岀戶緇帴鏀躲?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">鍙槸闃誨妯″紡涓媟ecv浼氫竴鐩撮樆濉炵洿鍒版帴鏀跺埌鏁版嵁錛岄潪闃誨妯″紡涓嬪鏋滄病鏈夋暟鎹氨浼氳繑鍥烇紝涓嶄細闃誨鐫璇伙紝鍥犳闇瑕佸驚鐜鍙栵級銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">榪斿洖璇存槑錛?nbsp;  </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">錛?錛夋垚鍔熸墽琛屾椂錛岃繑鍥炴帴鏀跺埌鐨勫瓧鑺傛暟銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">錛?錛夎嫢鍙︿竴绔凡鍏抽棴榪炴帴鍒欒繑鍥?錛岃繖縐嶅叧闂槸瀵規柟涓誨姩涓旀甯哥殑鍏抽棴</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">錛?錛夊け璐ヨ繑鍥?1錛宔rrno琚涓轟互涓嬬殑鏌愪釜鍊?nbsp;  </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">EAGAIN錛氬鎺ュ瓧宸叉爣璁頒負闈為樆濉烇紝鑰屾帴鏀舵搷浣滆闃誨鎴栬呮帴鏀惰秴鏃?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">EBADF錛歴ock涓嶆槸鏈夋晥鐨勬弿榪拌瘝</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">ECONNREFUSE錛氳繙紼嬩富鏈洪樆緇濈綉緇滆繛鎺?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">EFAULT錛氬唴瀛樼┖闂磋闂嚭閿?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">EINTR錛氭搷浣滆淇″彿涓柇</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">EINVAL錛氬弬鏁版棤鏁?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">ENOMEM錛氬唴瀛樹笉瓚?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">ENOTCONN錛氫笌闈㈠悜榪炴帴鍏寵仈鐨勫鎺ュ瓧灝氭湭琚繛鎺ヤ笂</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">ENOTSOCK錛歴ock绱㈠紩鐨勪笉鏄鎺ュ瓧</p><img src ="http://m.shnenglu.com/API/aggbug/215420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/API/" target="_blank">C++鎶鏈腑蹇?/a> 2017-12-12 10:32 <a href="http://m.shnenglu.com/API/archive/2017/12/12/215420.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Echo Server based on libevent http://m.shnenglu.com/API/archive/2015/05/03/210531.htmlC++鎶鏈腑蹇?/dc:creator>C++鎶鏈腑蹇?/author>Sun, 03 May 2015 12:28:00 GMThttp://m.shnenglu.com/API/archive/2015/05/03/210531.htmlhttp://m.shnenglu.com/API/comments/210531.htmlhttp://m.shnenglu.com/API/archive/2015/05/03/210531.html#Feedback0http://m.shnenglu.com/API/comments/commentRss/210531.htmlhttp://m.shnenglu.com/API/services/trackbacks/210531.html
鍑哄錛欱log of Felix021
鏃墮棿錛歋at, 25 Feb 2012 00:43:26 +0000
浣滆咃細felix021
鍦板潃錛歨ttp://www.felix021.com/blog/read.php?2068
鍐呭錛?/div>
鑺變簡涓ゅぉ鐨勬椂闂村湪libevent涓婏紝鎯蟲葷粨涓嬶紝灝變互鍐欑畝鍗晅utorial鐨勬柟寮忓惂錛岃矊浼兼病鏈変竴綃囩畝鍗曠殑璇存槑錛岃浜洪┈涓婂氨鑳戒笂鎵嬬敤鐨勩?/div>
棣栧厛緇欏嚭瀹樻柟鏂囨。鍚э細 http://libevent.org 錛岄欏墊湁涓狿rogramming with Libevent錛岄噷闈㈡槸涓鑺備竴鑺傜殑浠嬬粛libevent錛屼絾鏄劅瑙変俊鎭噺澶ぇ浜嗭紝鑰屼笖榪樻槸鑻辨枃鐨?銆?錛堝綋鐒訛紝濡傛灉鎯沖ソ濂界敤libevent錛岀湅鐪嬭繕鏄緢鏈夊繀瑕佺殑錛夛紝榪樻湁涓猂eference錛屽ぇ鑷村氨鏄鍚勪釜鐗堟湰鐨刲ibevent浣跨敤doxgen鐢熸垚鐨勬枃妗o紝鐢ㄦ潵鏌ュ嚱鏁板師鍨嬪拰鍩烘湰鐢ㄦ硶浠涔堢殑銆?/div>
涓嬮潰鍋囧畾宸茬粡瀛︿範榪囧熀鏈殑socket緙栫▼錛坰ocket,bind,listen,accept,connect,recv,send,close錛夛紝騫朵笖瀵瑰紓姝?callback鏈夊熀鏈璇嗐?/div>
鍩烘湰鐨剆ocket緙栫▼鏄樆濉?鍚屾鐨勶紝姣忎釜鎿嶄綔闄ら潪宸茬粡瀹屾垚鎴栬呭嚭閿欐墠浼氳繑鍥烇紝榪欐牱瀵逛簬姣忎竴涓姹傦紝瑕佷嬌鐢ㄤ竴涓嚎紼嬫垨鑰呭崟鐙殑榪涚▼鍘誨鐞嗭紝緋葷粺璧勬簮娌℃硶鏀拺澶ч噺鐨勮姹傦紙鎵璋揷10k problem?錛夛紝渚嬪鍐呭瓨錛氶粯璁ゆ儏鍐典笅姣忎釜綰跨▼闇瑕佸崰鐢?锝?M鐨勬爤絀洪棿銆俻osix瀹氫箟浜嗗彲浠ヤ嬌鐢ㄥ紓姝ョ殑select緋葷粺璋冪敤錛屼絾鏄洜涓哄叾閲囩敤浜嗚疆璇㈢殑鏂瑰紡鏉ュ垽鏂煇涓猣d鏄惁鍙樻垚active錛屾晥鐜囦笉楂榌O(n)]錛岃繛鎺ユ暟涓澶氾紝涔熻繕鏄拺涓嶄綇銆備簬鏄悇緋葷粺鍒嗗埆鎻愬嚭浜嗗熀浜庡紓姝?callback鐨勭郴緇熻皟鐢紝渚嬪Linux鐨別poll錛孊SD鐨刱queue錛學indows鐨処OCP銆傜敱浜庡湪鍐呮牳灞傞潰鍋氫簡鏀寔錛屾墍浠ュ彲浠ョ敤O(1)鐨勬晥鐜囨煡鎵懼埌active鐨刦d銆傚熀鏈笂錛宭ibevent灝辨槸瀵硅繖浜涢珮鏁圛O鐨勫皝瑁咃紝鎻愪緵緇熶竴鐨凙PI錛岀畝鍖栧紑鍙戙?/div>
libevent澶ф鏄繖鏍風殑錛?/div>
    榛樿鎯呭喌涓嬫槸鍗曠嚎紼嬬殑錛堝彲浠ラ厤緗垚澶氱嚎紼嬶紝濡傛灉鏈夐渶瑕佺殑璇濓級錛屾瘡涓嚎紼嬫湁涓斿彧鏈変竴涓猠vent_base錛屽搴斾竴涓猻truct event_base緇撴瀯浣擄紙浠ュ強闄勪簬鍏朵笂鐨勪簨浠剁鐞嗗櫒錛夛紝鐢ㄦ潵schedule鎵樼緇欏畠鐨勪竴緋誨垪event錛屽彲浠ュ拰鎿嶄綔緋葷粺鐨勮繘紼嬬鐞嗙被姣旓紝褰撶劧錛岃鏇寸畝鍗曚竴鐐廣傚綋涓涓簨浠跺彂鐢熷悗錛宔vent_base浼氬湪鍚堥傜殑鏃墮棿錛堜笉涓瀹氭槸绔嬪嵆錛夊幓璋冪敤緇戝畾鍦ㄨ繖涓簨浠朵笂鐨勫嚱鏁幫紙浼犲叆涓浜涢瀹氫箟鐨勫弬鏁幫紝浠ュ強鍦ㄧ粦瀹氭椂鎸囧畾鐨勪竴涓弬鏁幫級錛岀洿鍒拌繖涓嚱鏁版墽琛屽畬錛屽啀榪斿洖schedule鍏朵粬浜嬩歡銆?/鍒涘緩涓涓猠vent_base
struct event_base *base = event_base_new();
assert(base != NULL);
    event_base鍐呴儴鏈変竴涓驚鐜紝寰幆闃誨鍦╡poll/kqueue絳夌郴緇熻皟鐢ㄤ笂錛岀洿鍒版湁涓涓?涓浜涗簨浠跺彂鐢燂紝鐒跺悗鍘誨鐞嗚繖浜涗簨浠躲傚綋鐒訛紝榪欎簺浜嬩歡瑕佽緇戝畾鍦ㄨ繖涓猠vent_base涓娿傛瘡涓簨浠跺搴斾竴涓猻truct event錛屽彲浠ユ槸鐩戝惉涓涓猣d鎴栬匬OSIX淇″彿閲忎箣綾伙紙榪欓噷鍙fd浜嗭紝鍏朵粬鐨勭湅manual鍚э級銆俿truct event浣跨敤event_new鏉ュ垱寤哄拰緇戝畾錛屼嬌鐢╡vent_add鏉ュ惎鐢細//鍒涘緩騫剁粦瀹氫竴涓猠vent
struct event *listen_event;
//鍙傛暟錛歟vent_base, 鐩戝惉鐨刦d錛屼簨浠剁被鍨嬪強灞炴э紝緇戝畾鐨勫洖璋冨嚱鏁幫紝緇欏洖璋冨嚱鏁扮殑鍙傛暟
listen_event = event_new(base, listener, EV_READ|EV_PERSIST, callback_func, (void*)base);
//鍙傛暟錛歟vent錛岃秴鏃舵椂闂?struct timeval *綾誨瀷鐨勶紝NULL琛ㄧず鏃犺秴鏃惰緗?
event_add(listen_event, NULL);
    娉細libevent鏀寔鐨勪簨浠跺強灞炴у寘鎷?浣跨敤bitfield瀹炵幇錛屾墍浠ヨ鐢?| 鏉ヨ瀹冧滑鍚堜綋)
    (a) EV_TIMEOUT: 瓚呮椂
    (b) EV_READ: 鍙緗戠粶緙撳啿涓繕鏈夋暟鎹紝鍥炶皟鍑芥暟灝變細琚Е鍙?/div>
    (c) EV_WRITE: 鍙濉炵粰緗戠粶緙撳啿鐨勬暟鎹鍐欏畬錛屽洖璋冨嚱鏁板氨浼氳瑙﹀彂
    (d) EV_SIGNAL: POSIX淇″彿閲忥紝鍙傝僲anual鍚?/div>
    (e) EV_PERSIST: 涓嶆寚瀹氳繖涓睘鎬х殑璇濓紝鍥炶皟鍑芥暟琚Е鍙戝悗浜嬩歡浼氳鍒犻櫎
    (f) EV_ET: Edge-Trigger杈圭紭瑙﹀彂錛屽弬鑰僂POLL_ET
    鐒跺悗闇瑕佸惎鍔╡vent_base鐨勫驚鐜紝榪欐牱鎵嶈兘寮濮嬪鐞嗗彂鐢熺殑浜嬩歡銆傚驚鐜殑鍚姩浣跨敤event_base_dispatch錛屽驚鐜皢涓鐩存寔緇紝鐩村埌涓嶅啀鏈夐渶瑕佸叧娉ㄧ殑浜嬩歡錛屾垨鑰呮槸閬囧埌event_loopbreak()/event_loopexit()鍑芥暟銆?/鍚姩浜嬩歡寰幆
event_base_dispatch(base);
    鎺ヤ笅鏉ュ叧娉ㄤ笅緇戝畾鍒癳vent鐨勫洖璋冨嚱鏁癱allback_func錛氫紶閫掔粰瀹冪殑鏄竴涓猻ocket fd銆佷竴涓猠vent綾誨瀷鍙婂睘鎬it_field銆佷互鍙婁紶閫掔粰event_new鐨勬渶鍚庝竴涓弬鏁幫紙鍘諱笂闈㈠嚑琛屽洖欏句竴涓嬶紝鎶奺vent_base緇欎紶榪涙潵浜嗭紝瀹為檯涓婃洿澶氬湴鏄垎閰嶄竴涓粨鏋勪綋錛屾妸鐩稿叧鐨勬暟鎹兘鎾傝繘鍘伙紝鐒跺悗涓㈢粰event_new錛屽湪榪欓噷灝辮兘鍙栧緱鍒頒簡錛夈傚叾鍘熷瀷鏄細typedef void(* event_callback_fn)(evutil_socket_t sockfd, short event_type, void *arg)
    瀵逛簬涓涓湇鍔″櫒鑰岃█錛屼笂闈㈢殑嫻佺▼澶ф鏄繖鏍風粍鍚堢殑錛?/div>
    1. listener = socket()錛宐ind()錛宭isten()錛岃緗畁onblocking(POSIX緋葷粺涓彲浣跨敤fcntl璁劇疆錛寃indows涓嶉渶瑕佽緗紝瀹為檯涓妉ibevent鎻愪緵浜嗙粺涓鐨勫寘瑁卐vutil_make_socket_nonblocking)
    2. 鍒涘緩涓涓猠vent_base
    3. 鍒涘緩涓涓猠vent錛屽皢璇ocket鎵樼緇檈vent_base錛屾寚瀹氳鐩戝惉鐨勪簨浠剁被鍨嬶紝騫剁粦瀹氫笂鐩稿簲鐨勫洖璋冨嚱鏁?鍙婇渶瑕佺粰瀹冪殑鍙傛暟)銆傚浜巐istener socket鏉ヨ錛屽彧闇瑕佺洃鍚珽V_READ|EV_PERSIST
    4. 鍚敤璇ヤ簨浠?/div>
    5. 榪涘叆浜嬩歡寰幆
    ---------------
    6. (寮傛) 褰撴湁client鍙戣搗璇鋒眰鐨勬椂鍊欙紝璋冪敤璇ュ洖璋冨嚱鏁幫紝榪涜澶勭悊銆?/div>
    闂錛氫負浠涔堜笉鍦╨isten瀹岄┈涓婅皟鐢╝ccept錛岃幏寰楀鎴風榪炴帴浠ュ悗鍐嶄涪緇檈vent_base鍛紵榪欎釜闂鍏堟兂鎯沖櫌銆?/div>
    鍥炶皟鍑芥暟瑕佸仛浠涔堜簨鎯呭憿錛熷綋鐒舵槸澶勭悊client鐨勮姹備簡銆傞鍏堣accept錛岃幏寰椾竴涓彲浠ヤ笌client閫氫俊鐨剆ockfd錛岀劧鍚?#8230;…璋冪敤recv/send鍚楋紵閿欙紒澶ч敊鐗歸敊錛佸鏋滅洿鎺ヨ皟鐢╮ecv/send鐨勮瘽錛岃繖涓嚎紼嬪氨闃誨鍦ㄨ繖涓湴鏂逛簡錛屽鏋滆繖涓鎴風闈炲父鐨勯槾闄╋紙姣斿涓鐩翠笉鍙戞秷鎭紝鎴栬呯綉緇滀笉濂斤紝鑰佹槸涓㈠寘錛夛紝libevent灝卞彧鑳界瓑瀹冿紝娌℃硶澶勭悊鍏朵粬鐨勮姹備簡——鎵浠ュ簲璇ュ垱寤轟竴涓柊鐨別vent鏉ユ墭綆¤繖涓猻ockfd銆?/div>
    鍦ㄨ佺増鏈琹ibevent涓婄殑瀹炵幇錛屾瘮杈冪綏鍡濡傛灉涓嶆兂璇︾粏浜嗚В鐨勮瘽錛岀湅涓嬩竴閮ㄥ垎]銆?/div>
    瀵逛簬鏈嶅姟鍣ㄥ笇鏈涘厛浠巆lient鑾峰彇鏁版嵁鐨勬儏鍐碉紝澶ц嚧嫻佺▼鏄繖鏍風殑錛?/div>
    1. 灝嗚繖涓猻ockfd璁劇疆涓簄onblocking
    2. 鍒涘緩2涓猠vent:
        event_read錛岀粦涓妔ockfd鐨凟V_READ|EV_PERSIST錛岃緗洖璋冨嚱鏁板拰鍙傛暟錛堝悗闈㈡彁鍒扮殑struct錛?/div>
        event_write錛岀粦涓妔ockfd鐨凟V_WRITE|EV_PERSIST錛岃緗洖璋冨嚱鏁板拰鍙傛暟錛堝悗闈㈡彁鍒扮殑struct錛?/div>
    3. 鍚敤event_read浜嬩歡
    ------
    4. (寮傛) 絳夊緟event_read浜嬩歡鐨勫彂鐢? 璋冪敤鐩稿簲鐨勫洖璋冨嚱鏁般傝繖閲岄夯鐑︽潵浜嗭細鍥炶皟鍑芥暟鐢╮ecv璇誨叆鐨勬暟鎹紝涓嶈兘鐩存帴鐢╯end涓㈢粰sockfd浜嗕簨——鍥犱負sockfd鏄痭onblocking鐨勶紝涓㈢粰瀹冪殑璇濓紝涓嶈兘淇濊瘉姝g‘錛堜負浠涔堝憿錛燂級銆傛墍浠ラ渶瑕佷竴涓嚜宸辯鐞嗙殑緙撳瓨鐢ㄦ潵淇濆瓨璇誨叆鐨勬暟鎹腑錛堝湪accept浠ュ悗灝卞垱寤轟竴涓猻truct錛屼綔涓虹2姝ュ洖璋冨嚱鏁扮殑arg浼犺繘鏉ワ級錛屽湪鍚堥傜殑鏃墮棿錛堟瘮濡傞亣鍒版崲琛岀錛夊惎鐢╡vent_write浜嬩歡銆恊vent_add(event_write, NULL)銆戯紝絳夊緟EV_WRITE浜嬩歡鐨勮Е鍙?/div>
    ------
    5. (寮傛) 褰揺vent_write浜嬩歡鐨勫洖璋冨嚱鏁拌璋冪敤鐨勬椂鍊欙紝寰sockfd鍐欏叆鏁版嵁錛岀劧鍚庡垹闄vent_write浜嬩歡銆恊vent_del(event_write)銆戯紝絳夊緟event_read浜嬩歡鐨勪笅涓嬈℃墽琛屻?/div>
    浠ヤ笂姝ラ姣旇緝鏅︽訂錛屽叿浣撲唬鐮佸彲鍙傝冨畼鏂規枃妗i噷闈㈢殑銆怑xample: A low-level ROT13 server with Libevent銆?/div>
    鐢變簬闇瑕佽嚜宸辯鐞嗙紦鍐插尯錛屼笖榪囩▼鏅︽訂闅炬噦錛屽茍涓斾笉鍏煎浜嶹indows鐨処OCP錛屾墍浠ibevent2寮濮嬶紝鎻愪緵浜哹ufferevent榪欎釜紲炲櫒錛岀敤鏉ユ彁渚涙洿鍔犱紭闆呫佹槗鐢ㄧ殑API銆俿truct bufferevent鍐呭緩浜嗕袱涓猠vent(read/write)鍜屽搴旂殑緙撳啿鍖恒恠truct evbuffer *input, *output銆戯紝騫舵彁渚涚浉搴旂殑鍑芥暟鐢ㄦ潵鎿嶄綔緙撳啿鍖猴紙鎴栬呯洿鎺ユ搷浣渂ufferevent錛夈傛瘡褰撴湁鏁版嵁琚鍏nput鐨勬椂鍊欙紝read_cb鍑芥暟琚皟鐢紱姣忓綋output琚緭鍑哄畬鐨勬椂鍊欙紝write_cb琚皟鐢紱鍦ㄧ綉緇淚O鎿嶄綔鍑虹幇閿欒鐨勬儏鍐碉紙榪炴帴涓柇銆佽秴鏃躲佸叾浠栭敊璇級錛宔rror_cb琚皟鐢ㄣ備簬鏄笂涓閮ㄥ垎鐨勬楠よ綆鍖栦負錛?/div>
    1. 璁劇疆sockfd涓簄onblocking
    2. 浣跨敤bufferevent_socket_new鍒涘緩涓涓猻truct bufferevent *bev錛屽叧鑱旇sockfd錛屾墭綆$粰event_base
    3. 浣跨敤bufferevent_setcb(bev, read_cb, write_cb, error_cb, (void *)arg)灝咵V_READ/EV_WRITE瀵瑰簲鐨勫嚱鏁?/div>
    4. 浣跨敤bufferevent_enable(bev, EV_READ|EV_WRITE|EV_PERSIST)鏉ュ惎鐢╮ead/write浜嬩歡
    ------
    5. (寮傛)
        鍦╮ead_cb閲岄潰浠巌nput璇誨彇鏁版嵁錛屽鐞嗗畬姣曞悗濉炲埌output閲?浼氳鑷姩鍐欏叆鍒皊ockfd)
        鍦╳rite_cb閲岄潰錛堥渶瑕佸仛浠涔堝悧錛熷浜庝竴涓猠cho server鏉ヨ錛宺ead_cb灝辮凍澶熶簡錛?/div>
        鍦╡rror_cb閲岄潰澶勭悊閬囧埌鐨勯敊璇?/div>
    *. 鍙互浣跨敤bufferevent_set_timeouts(bev, struct timeval *READ, struct timeval *WRITE)鏉ヨ緗鍐欒秴鏃? 鍦╡rror_cb閲岄潰澶勭悊瓚呮椂銆?/div>
    *. read_cb鍜寃rite_cb鐨勫師鍨嬫槸
         void read_or_write_callback(struct bufferevent *bev, void *arg)
       error_cb鐨勫師鍨嬫槸
         void error_cb(struct bufferevent *bev, short error, void *arg) //榪欎釜鏄痚vent鐨勬爣鍑嗗洖璋冨嚱鏁板師鍨?/div>
       鍙互浠巄ev涓敤libevent鐨凙PI鎻愬彇鍑篹vent_base銆乻ockfd銆乮nput/output絳夌浉鍏蟲暟鎹紝璇︽儏RTFM~
    
    浜庢槸浠g爜綆鍖栧埌鍙渶瑕佸嚑琛岀殑read_cb鍜宔rror_cb鍑芥暟鍗沖彲錛?/div>
void read_cb(struct bufferevent *bev, void *arg) {
    char line[256];
    int n;
    evutil_socket_t fd = bufferevent_getfd(bev);
    while (n = bufferevent_read(bev, line, 256), n > 0)
        bufferevent_write(bev, line, n);
}
void error_cb(struct bufferevent *bev, short event, void *arg) {
    bufferevent_free(bev);
}
    浜庢槸涓涓敮鎸佸ぇ騫跺彂閲忕殑echo server灝辨垚鍨嬩簡錛佷笅闈㈤檮涓婃棤娉ㄩ噴鐨別cho server婧愮爜錛?10琛岋紝澶氭妱鍑犻亶錛屽氨鑳藉畬鍏ㄥ紕鎳傚暒錛佹洿澶嶆潅鐨勪緥瀛愬弬瑙佸畼鏂規枃妗i噷闈㈢殑銆怑xample: A simpler ROT13 server with Libevent銆?/div>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <assert.h>
#include <event2/event.h>
#include <event2/bufferevent.h>
#define LISTEN_PORT 9999
#define LISTEN_BACKLOG 32
void do_accept(evutil_socket_t listener, short event, void *arg);
void read_cb(struct bufferevent *bev, void *arg);
void error_cb(struct bufferevent *bev, short event, void *arg);
void write_cb(struct bufferevent *bev, void *arg);
int main(int argc, char *argv[])
{
    int ret;
    evutil_socket_t listener;
    listener = socket(AF_INET, SOCK_STREAM, 0);
    assert(listener > 0);
    evutil_make_listen_socket_reuseable(listener);
    struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = 0;
    sin.sin_port = htons(LISTEN_PORT);
    if (bind(listener, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
        perror("bind");
        return 1;
    }
    if (listen(listener, LISTEN_BACKLOG) < 0) {
        perror("listen");
        return 1;
    }
    printf ("Listening...\n");
    evutil_make_socket_nonblocking(listener);
    struct event_base *base = event_base_new();
    assert(base != NULL);
    struct event *listen_event;
    listen_event = event_new(base, listener, EV_READ|EV_PERSIST, do_accept, (void*)base);
    event_add(listen_event, NULL);
    event_base_dispatch(base);
    printf("The End.");
    return 0;
}
void do_accept(evutil_socket_t listener, short event, void *arg)
{
    struct event_base *base = (struct event_base *)arg;
    evutil_socket_t fd;
    struct sockaddr_in sin;
    socklen_t slen = sizeof(sin);
    fd = accept(listener, (struct sockaddr *)&sin, &slen);
    if (fd < 0) {
        perror("accept");
        return;
    }
    if (fd > FD_SETSIZE) { //榪欎釜if鏄弬鑰冧簡閭d釜ROT13鐨勪緥瀛愶紝璨屼技鏄畼鏂圭殑鐤忔紡錛屼粠select-based渚嬪瓙閲屾妱榪囨潵蹇樹簡鏀?/div>
        perror("fd > FD_SETSIZE\n");
        return;
    }
    printf("ACCEPT: fd = %u\n", fd);
    struct bufferevent *bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);
    bufferevent_setcb(bev, read_cb, NULL, error_cb, arg);
    bufferevent_enable(bev, EV_READ|EV_WRITE|EV_PERSIST);
}
void read_cb(struct bufferevent *bev, void *arg)
{
#define MAX_LINE    256
    char line[MAX_LINE+1];
    int n;
    evutil_socket_t fd = bufferevent_getfd(bev);
    while (n = bufferevent_read(bev, line, MAX_LINE), n > 0) {
        line[n] = '\0';
        printf("fd=%u, read line: %s\n", fd, line);
        bufferevent_write(bev, line, n);
    }
}
void write_cb(struct bufferevent *bev, void *arg) {}
void error_cb(struct bufferevent *bev, short event, void *arg)
{
    evutil_socket_t fd = bufferevent_getfd(bev);
    printf("fd = %u, ", fd);
    if (event & BEV_EVENT_TIMEOUT) {
        printf("Timed out\n"); //if bufferevent_set_timeouts() called
    }
    else if (event & BEV_EVENT_EOF) {
        printf("connection closed\n");
    }
    else if (event & BEV_EVENT_ERROR) {
        printf("some other error\n");
    }
    bufferevent_free(bev);
}


]]>libevent windows緙栬瘧http://m.shnenglu.com/API/archive/2015/02/15/209824.htmlC++鎶鏈腑蹇?/dc:creator>C++鎶鏈腑蹇?/author>Sun, 15 Feb 2015 05:14:00 GMThttp://m.shnenglu.com/API/archive/2015/02/15/209824.htmlhttp://m.shnenglu.com/API/comments/209824.htmlhttp://m.shnenglu.com/API/archive/2015/02/15/209824.html#Feedback3http://m.shnenglu.com/API/comments/commentRss/209824.htmlhttp://m.shnenglu.com/API/services/trackbacks/209824.html1. 涓嬭澆libevent搴?br />2.鏈漢鐢╲s2013緙栬瘧錛屾墍鏈夐渶瑕佷慨鏀?br />

鍦ㄤ互涓?/span>3涓枃浠跺紑澶翠慨鏀?#8220;#define _WIN32_WINNT 0x0603

libevent-2.0.22-stable\event_iocp.c

libevent-2.0.22-stable\evthread_win32.c

libevent-2.0.22-stable\listener.c

3.璁劇疆nmake鐨勭幆澧?br />VC6  prefix\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT
VC8  prefix\Microsoft Visual Studio 8\VC\bin\vcvars32.bat
VC9  prefix\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat
鎴戣繖閲屾槸vs2013錛屾墽琛孌:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat
娉ㄦ剰錛氳繖浜涙壒澶勭悊鏂囦歡鍙細鍦ㄥ綋鍓嶈繘紼嬩腑璁劇疆錛堝眬閮ㄧ殑錛夌幆澧冨彉閲忥紝涔熷氨鏄錛?br />1. 鐢╟md錛堟垨鑰卌ommand錛夋墦寮鐨勫懡浠よ紿楀彛涓紝 榪愯鏌愪釜vcvar32.bat涓嬈°?br />閭d箞褰撳墠鍛戒護琛岀獥鍙d腑灝卞彲浠ユ甯鎬嬌鐢╟l錛岀洿鍒板叧闂?br />
4.浣跨敤VC鐨刵make -f Makefile.nmake鍗沖彲緙栬瘧32浣峳elease妯″紡銆?/span>
濡傛灉瑕佹眰緙栬瘧64浣嶇殑鐗堟湰錛岄渶瑕佸湪Makefile.nmake涓坊鍔犱竴涓狶IBFLAGS閫夐」 /MACHINE:X64
濡傛灉瑕佸姞璋冭瘯淇℃伅錛屽彲浠ュ湪 CFLAGS涓姞鍏?Zi錛?2浣嶅姞璋冭瘯閫夐」鏄?CFLAGS涓姞/ZI錛屽綋鐒惰璋冩暣浼樺寲閫夐」/Ox



]]>tcp榪炴帴鎺㈡祴Keepalive鍜屽績璺沖寘http://m.shnenglu.com/API/archive/2013/08/13/202516.htmlC++鎶鏈腑蹇?/dc:creator>C++鎶鏈腑蹇?/author>Tue, 13 Aug 2013 01:03:00 GMThttp://m.shnenglu.com/API/archive/2013/08/13/202516.htmlhttp://m.shnenglu.com/API/comments/202516.htmlhttp://m.shnenglu.com/API/archive/2013/08/13/202516.html#Feedback1http://m.shnenglu.com/API/comments/commentRss/202516.htmlhttp://m.shnenglu.com/API/services/trackbacks/202516.html      閲囩敤TCP榪炴帴鐨凜/S妯″紡杞歡錛岃繛鎺ョ殑鍙屾柟鍦ㄨ繛鎺ョ┖闂茬姸鎬佹椂錛屽鏋滀換鎰忎竴鏂規剰澶栧穿婧冦佸綋鏈恒佺綉綰挎柇寮鎴栬礬鐢卞櫒鏁呴殰錛屽彟涓鏂規棤娉曞緱鐭CP榪炴帴宸茬粡澶辨晥錛岄櫎闈炵戶緇湪姝よ繛鎺ヤ笂鍙戦佹暟鎹鑷撮敊璇繑鍥炪傚緢澶氭椂鍊欙紝榪欎笉鏄垜浠渶瑕佺殑銆傛垜浠笇鏈涙湇鍔″櫒绔拰瀹㈡埛绔兘鑳藉強鏃舵湁鏁堝湴媯嫻嬪埌榪炴帴澶辨晥錛岀劧鍚庝紭闆呭湴瀹屾垚涓浜涙竻鐞嗗伐浣滃茍鎶婇敊璇姤鍛婄粰鐢ㄦ埛銆?br />      濡備綍鍙婃椂鏈夋晥鍦版嫻嬪埌涓鏂圭殑闈炴甯告柇寮錛屼竴鐩存湁涓ょ鎶鏈彲浠ヨ繍鐢ㄣ備竴縐嶆槸鐢盩CP鍗忚灞傚疄鐜扮殑Keepalive錛屽彟涓縐嶆槸鐢卞簲鐢ㄥ眰鑷繁瀹炵幇鐨勫績璺沖寘銆?br />      TCP榛樿騫朵笉寮鍚疜eepalive鍔熻兘錛屽洜涓哄紑鍚疜eepalive鍔熻兘闇瑕佹秷鑰楅澶栫殑瀹藉甫鍜屾祦閲忥紝灝界榪欏井涓嶈凍閬擄紝浣嗗湪鎸夋祦閲忚璐圭殑鐜涓嬪鍔犱簡璐圭敤錛屽彟涓鏂歸潰錛孠eepalive璁劇疆涓嶅悎鐞嗘椂鍙兘浼氬洜涓虹煭鏆傜殑緗戠粶娉㈠姩鑰屾柇寮鍋ュ悍鐨凾CP榪炴帴銆傚茍涓旓紝榛樿鐨凨eepalive瓚呮椂闇瑕?,200,000 milliseconds錛屽嵆2灝忔椂錛屾帰嫻嬫鏁頒負5嬈°?/span>
      瀵逛簬Win2K/XP/2003錛屽彲浠ヤ粠涓嬮潰鐨勬敞鍐岃〃欏規壘鍒板獎鍝嶆暣涓郴緇熸墍鏈夎繛鎺ョ殑keepalive鍙傛暟錛?/span>
       [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters]
        "KeepAliveTime”=dword:006ddd00
        "KeepAliveInterval"=dword:000003e8 
        "MaxDataRetries"="5"

      瀵逛簬瀹炵敤鐨勭▼搴忔潵璇達紝2灝忔椂鐨勭┖闂叉椂闂村お闀褲傚洜姝わ紝鎴戜滑闇瑕佹墜宸ュ紑鍚疜eepalive鍔熻兘騫惰緗悎鐞嗙殑Keepalive鍙傛暟銆?
// 寮鍚疜eepAlive
BOOL bKeepAlive = TRUE;
int nRet = ::setsockopt(socket_handle, SOL_SOCKET, SO_KEEPALIVE, (char*)&bKeepAlive, sizeof(bKeepAlive));

if (nRet == SOCKET_ERROR)
{
return FALSE;
}


// 璁劇疆KeepAlive鍙傛暟
tcp_keepalive alive_in = {0};
tcp_keepalive alive_out 
= {0};
alive_in.keepalivetime 
= 5000// 寮濮嬮嬈eepAlive鎺㈡祴鍓嶇殑TCP絀洪棴鏃墮棿

alive_in.keepaliveinterval 
= 1000// 涓ゆKeepAlive鎺㈡祴闂寸殑鏃墮棿闂撮殧

alive_in.onoff 
= TRUE;
unsigned 
long ulBytesReturn = 0;

nRet 
= WSAIoctl(socket_handle, SIO_KEEPALIVE_VALS, &alive_in, sizeof(alive_in),
&alive_out, sizeof(alive_out), &ulBytesReturn, NULL, NULL);
if (nRet == SOCKET_ERROR)
{
return FALSE;


}



寮鍚疜eepalive閫夐」涔嬪悗錛屽浜庝嬌鐢↖OCP妯″瀷鐨勬湇鍔″櫒绔▼搴忔潵璇達紝涓鏃︽嫻嬪埌榪炴帴鏂紑錛孏etQueuedCompletionStatus鍑芥暟灝嗙珛鍗寵繑鍥濬ALSE錛屼嬌寰楁湇鍔″櫒绔兘鍙婃椂娓呴櫎璇ヨ繛鎺ャ侀噴鏀捐榪炴帴鐩稿叧鐨勮祫婧愩傚浜庝嬌鐢╯elect妯″瀷鐨勫鎴風鏉ヨ錛岃繛鎺ユ柇寮琚帰嫻嬪埌鏃訛紝浠ecv鐩殑闃誨鍦╯ocket涓婄殑select鏂規硶灝嗙珛鍗寵繑鍥濻OCKET_ERROR錛屼粠鑰屽緱鐭ヨ繛鎺ュ凡澶辨晥錛屽鎴風紼嬪簭渚挎湁鏈轟細鍙婃椂鎵ц娓呴櫎宸ヤ綔銆佹彁閱掔敤鎴鋒垨閲嶆柊榪炴帴銆?br />

 

鍙︿竴縐嶆妧鏈紝鐢卞簲鐢ㄧ▼搴忚嚜宸卞彂閫佸績璺沖寘鏉ユ嫻嬭繛鎺ョ殑鍋ュ悍鎬с傚鎴風鍙互鍦ㄤ竴涓猅imer涓垨浣庣駭鍒殑綰跨▼涓畾鏃跺悜鍙戞湇鍔″櫒鍙戦佷竴涓煭灝忕簿鎮嶇殑鍖咃紝騫剁瓑寰呮湇鍔″櫒鐨勫洖搴斻傚鎴風紼嬪簭鍦ㄤ竴瀹氭椂闂村唴娌℃湁鏀跺埌鏈嶅姟鍣ㄥ洖搴斿嵆璁や負榪炴帴涓嶅彲鐢紝鍚屾牱錛屾湇鍔″櫒鍦ㄤ竴瀹氭椂闂村唴娌℃湁鏀跺埌瀹㈡埛绔殑蹇冭煩鍖呭垯璁や負瀹㈡埛绔凡緇忔帀綰褲?br />

 

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

銆windows涓嬫澶勭殑”闈炴甯告柇寮”鎸嘥CP榪炴帴涓嶆槸浠ヤ紭闆呯殑鏂瑰紡鏂紑,濡傜綉綰挎晠闅滅瓑鐗╃悊閾捐礬鐨勫師鍥?榪樻湁紿佺劧涓繪満鏂數絳夊師鍥?

鏈変袱縐嶆柟娉曞彲浠ユ嫻?

1.TCP榪炴帴鍙屾柟瀹氭椂鍙戞彙鎵嬫秷鎭?


2.鍒╃敤TCP鍗忚鏍堜腑鐨凨eepAlive鎺㈡祴
絎簩縐嶆柟娉曠畝鍗曞彲闈?鍙渶瀵筎CP榪炴帴涓や釜Socket璁懼畾KeepAlive鎺㈡祴,
鎵浠ユ湰鏂囧彧璁茬浜岀鏂規硶鍦↙inux,Window2000涓嬬殑瀹炵幇(鍦ㄥ叾瀹冪殑騫沖彴涓婃病鏈変綔榪涗竴姝ョ殑嫻嬭瘯)


Windows 2000騫沖彴涓?nbsp;澶存枃浠?br />#include 
<mstcpip.h>
//瀹氫箟緇撴瀯鍙婂畯
/*

struct TCP_KEEPALIVE {
u_longonoff;
u_longkeepalivetime;
u_longkeepaliveinterval;
}
 ;
*/

    tcp_keepalive live,liveout; 
    live.keepaliveinterval=5000; //姣?縐掑彂涓嬈℃帰嫻嬫姤鏂?鍙?嬈℃病鏈夊洖搴旓紝灝辨柇寮
    live.keepalivetime=30000;//瓚呰繃30s娌℃湁鏁版嵁錛屽氨鍙戦佹帶嫻嬪寘
    
    live.onoff=TRUE; 
    int Opt = 1;
    int iRet = setsockopt(Accept,SOL_SOCKET,SO_KEEPALIVE,(char *)&Opt,sizeof(int)); 
    if(iRet == 0){
     DWORD dw;
     if(::WSAIoctl(Accept,SIO_KEEPALIVE_VALS,
      &live,sizeof(live),&liveout,sizeof(liveout),
      &dw,NULL,NULL)== SOCKET_ERROR){
     } 
    }






ACE涓嬩唬鐮?//by rainfish blog.csdn.net/bat603

int Opt = 1;
//鍦ㄦ祴璇曡繃紼嬩腑錛屽彂鐜版嫻嬬殑嬈℃暟鏄?嬈★紝鍗充笅闈㈢殑璁劇疆涓紝浠庢渶榪戜竴嬈℃秷鎭紑濮嬭綆楃殑10縐掑悗錛屾瘡嬈¢棿闅?縐掞紝榪炵畫鍙戦?嬈★紝鍗?5縐掑彂鐜扮綉緇滄柇浜?br />tcp_keepalive live,liveout;
live.keepaliveinterval=5000; //姣忔媯嫻嬬殑闂撮殧 錛堝崟浣嶆縐掞級
live.keepalivetime=10000; //絎竴嬈″紑濮嬪彂閫佺殑鏃墮棿錛堝崟浣嶆縐掞級
live.onoff=TRUE;
int iRet = stream.set_option(SOL_SOCKET,SO_KEEPALIVE,&Opt,sizeof(int));
if(iRet == 0){
DWORD dw;
//姝ゅ鏄劇ず浜嗗湪ACE涓嬭幏鍙栧鎺ュ瓧鐨勬柟娉曪紝鍗沖彞鏌勭殑(SOCKET)鍖栧氨鏄彞鏌?br />if(WSAIoctl((SOCKET)h,SIO_KEEPALIVE_VALS,&live,sizeof(live),
&liveout,sizeof(liveout),&dw,NULL,NULL)== SOCKET_ERROR){
//Delete Client
return;
}
}


Linux騫沖彴涓?/p>


#include "/usr/include/linux/tcp.h"
#include "/usr/include/linux/socket.h"
////KeepAlive瀹炵幇錛屽崟浣嶇
//涓嬮潰浠g爜瑕佹眰鏈堿CE,濡傛灉娌℃湁鍖呭惈ACE,鍒欒鎶婄敤鍒扮殑ACE鍑芥暟鏀規垚linux鐩稿簲鐨勬帴鍙?br />int keepAlive = 1;//璁懼畾KeepAlive
int keepIdle = 5;//寮濮嬮嬈eepAlive鎺㈡祴鍓嶇殑TCP絀洪棴鏃墮棿
int keepInterval = 5;//涓ゆKeepAlive鎺㈡祴闂寸殑鏃墮棿闂撮殧
int keepCount = 3;//鍒ゅ畾鏂紑鍓嶇殑KeepAlive鎺㈡祴嬈℃暟
if(setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(void*)&keepAlive,sizeof(keepAlive)) == -1)
{
ACE_DEBUG ((LM_INFO,
ACE_TEXT ("(%P|%t) setsockopt SO_KEEPALIVE error!/n")));
}

if(setsockopt(s,SOL_TCP,TCP_KEEPIDLE,(void *)&keepIdle,sizeof(keepIdle)) == -1)
{
ACE_DEBUG ((LM_INFO,
ACE_TEXT ("(%P|%t) setsockopt TCP_KEEPIDLE error!/n")));
}

if(setsockopt(s,SOL_TCP,TCP_KEEPINTVL,(void *)&keepInterval,sizeof(keepInterval)) == -1)
{
ACE_DEBUG ((LM_INFO,
ACE_TEXT ("(%P|%t) setsockopt TCP_KEEPINTVL error!/n")));
}

if(setsockopt(s,SOL_TCP,TCP_KEEPCNT,(void *)&keepCount,sizeof(keepCount)) == -1)
{
ACE_DEBUG ((LM_INFO,
ACE_TEXT ("(%P|%t)setsockopt TCP_KEEPCNT error!/n")));
}

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



]]>
UDP,TCP鎵撴礊鎶鏈?/title><link>http://m.shnenglu.com/API/archive/2012/08/24/188130.html</link><dc:creator>C++鎶鏈腑蹇?/dc:creator><author>C++鎶鏈腑蹇?/author><pubDate>Fri, 24 Aug 2012 06:18:00 GMT</pubDate><guid>http://m.shnenglu.com/API/archive/2012/08/24/188130.html</guid><wfw:comment>http://m.shnenglu.com/API/comments/188130.html</wfw:comment><comments>http://m.shnenglu.com/API/archive/2012/08/24/188130.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://m.shnenglu.com/API/comments/commentRss/188130.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/API/services/trackbacks/188130.html</trackback:ping><description><![CDATA[鍐呭姒傝堪錛氬湪p2p閫氫俊棰嗗煙涓紝鐢盢AT(Network Address Translation錛岀綉緇滃湴鍧杞崲)寮曡搗鐨勯棶棰樺凡緇忎紬鎵鍛ㄧ煡浜?瀹冧細瀵艱嚧鍦∟AT鍐呴儴鐨刾2p瀹㈡埛绔湪鏃犺浠ヤ綍縐嶆湁鏁堢殑鍏綉ip閮芥棤娉曡闂殑闂銆傝櫧鐒剁洰鍓嶅凡緇忓彂灞曞嚭澶氱絀胯秺NAT鐨勬妧鏈?浣嗙浉鍏崇殑鎶鏈枃妗e嵈寰堝皯錛岀敤鏉ヨ瘉鏄庤繖浜涙妧鏈殑紼沖畾鎬у拰浼樼偣鐨勫疄闄呮暟鎹洿灝戙傛湰鏂囩殑鐩殑鍦ㄤ簬鎻忚堪鍜屽垎鏋愬湪瀹為檯涓繍鐢ㄥ緱鏈騫挎硾銆佹渶鍙潬鍚屾椂涔熸槸鏈綆鍗曠殑涓縐峃AT絀胯秺鎶鏈紝璇ユ妧鏈氬父琚О涓?#8220;鎵撴礊”鎶鏈傜洰鍓嶏紝“鎵撴礊”鎶鏈凡緇忓湪UDP閫氫俊棰嗗煙涓緱鍒頒簡騫挎硾鐨勭悊瑙e拰搴旂敤錛屽湪姝わ紝涔熷皢璁ㄨ濡備綍鍒╃敤瀹冨疄鐜板彲闈犵殑p2p鐨凾CP嫻侀氫俊銆傚湪鏀墮泦浜嗗ぇ閲忕殑“鎵撴礊”鎶鏈彲浠ョ┛瓚婄殑NAT璁懼鍜岀綉緇滅殑鏁版嵁浠ュ悗錛屾垜浠彂鐜?2%鐨勫凡嫻?NAT璁懼鏀寔UDP褰㈠紡鐨?#8220;鎵撴礊”絀胯秺錛?4%鐨勫凡嫻婲AT璁懼鏀寔TCP嫻佸艦寮忕殑“鎵撴礊”絀胯秺銆傜敱浜庨噸閲忕駭p2p搴旂敤紼嬪簭(濡傦紝VOIP銆丅T銆佸湪綰挎父鎴忕瓑)鐨勭敤鎴烽渶姹傞噺鎸佺畫涓婂崌錛屽茍涓旇浜嬪疄涔熷凡緇忓紩璧蜂簡NAT璁懼鐢熶駭鍘傚晢鐨勫箍娉涘叧娉紝鍥犳錛屾垜浠涓烘湭鏉ヤ細鏈夎秺鏉ヨ秺澶氱殑NAT璁懼鎻愪緵瀵?#8220;鎵撴礊”絀胯秺鎶鏈殑鏀寔銆? <p>1銆佷粙緇?/p> <p>鐢ㄦ埛閲忛珮閫熷闀夸互鍙婂ぇ閲忓畨鍏ㄩ棶棰樼殑宸ㄥぇ鍘嬪姏榪嬌Internet鎶鏈笉鏂悜鍓嶅彂灞曪紝浣嗘槸榪欎簺鏂板叴鐨勬妧鏈緢澶х▼搴﹀湴澧炲姞浜嗗簲鐢ㄧ▼搴忓紑鍙戠殑鎴愭湰鍜屽鏉傛с侷nternet鏈鍒濈殑鍦板潃浣撶郴鏄瘡涓妭鐐規湁涓涓敮涓涓嶅彉鐨勫叏灞鍦板潃錛屽彲浠ラ氳繃璇ュ湴鍧鐩存帴涓庝換浣曞叾瀹冪殑鑺傜偣榪涜閫氫俊錛岃岀幇濡備粖錛岃鍦板潃浣撶郴宸茬粡琚柊鐨勫疄闄呬笂騫挎硾浣跨敤鐨勫湴鍧浣撶郴鎵鏇挎崲錛屾柊鐨勫湴鍧浣撶郴鏄敱鍏ㄥ眬鍦板潃鍩熷拰閫氳繃NAT鎺ュ叆鍏ㄥ眬鍦板潃鍩熺殑澶ч噺縐佹湁鍦板潃鍩熺粍鎴愩傚湪鏂扮殑鍦板潃浣撶郴涓紙濡傚浘1鎵紺猴級錛屽彧鏈夊湪 “main”鍏ㄥ眬鍦板潃鍩熶腑鐨勮妭鐐瑰彲浠ュ湪緗戠粶涓緢瀹規槗鍦頒笌浠諱綍鍏跺畠鐨勬嫢鏈夊叏灞鍦板潃鐨勮妭鐐歸氫俊錛屽洜涓鴻鑺傜偣鎷ユ湁鍏ㄥ眬鐨勩佸敮涓鐨勩佸彲璺敱鐨勫湴鍧銆傚湪縐佹湁緗戠粶涓殑鑺傜偣鍙互涓庡湪鍚屼竴涓鏈夌綉緇滀腑鐨勫叾瀹冭妭鐐硅繘琛岄氫俊錛屽茍涓斿湪閫氬父鎯呭喌涓嬪彲浠ュ悜鍏ㄥ眬鍦板潃涓殑鏌愪釜“钁楀悕”鐨勮妭鐐瑰彂璧稵CP榪炴帴鎴栧彂閫乁DP鏁版嵁鍖呫侼AT璁懼鍦ㄦ鎵紨鐨勮鑹插氨鏄負浠庡唴緗戝悜鍏綉鍙戣搗鐨勮繛鎺ョ殑鑺傜偣鍒嗛厤涓存椂鐨勮漿鍙憇ession錛屽皢鏉ヨ嚜鍐呯綉鐨勬暟鎹寘鐨勫湴鍧鍜岀鍙h漿鎹負鍏綉鐨勫湴鍧鍜岀鍙o紝灝嗘潵鑷叕緗戠殑鏁版嵁鍖呯殑鍦板潃鍜岀鍙h漿鎹負鍐呯綉鐨勭鍙e拰鍦板潃錛屽悓鏃禢AT灝嗗睆钄芥墍鏈夋湭緇忔巿鏉冪殑鏉ヨ嚜鍏綉鐨勬暟鎹寘銆?/p> <div> <div><img border="0" alt="" src="http://www.ppcn.net/upload/2008-12/081208225549421.png" /> </div></div> <div>鏂扮殑Internet鍦板潃浣撶郴闈炲父閫傚悎浜?#8220;瀹㈡埛绔?鏈嶅姟鍣?#8221;榪欐牱鐨勯氫俊妯″紡錛屼竴涓吀鍨嬬殑C/S閫氫俊妯″紡鏄細瀹㈡埛绔湪鍐呯綉錛堢鏈夊湴鍧鍩燂級錛屾湇鍔″櫒鍦ㄥ叕緗戯紙鍏ㄥ眬鍦板潃鍩燂級錛岄氳繃NAT灝嗗唴緗戝拰鍏綉榪炴帴璧鋒潵銆傝繖縐嶅湴鍧浣撶郴浣垮緱鍦ㄤ笉鍚屽唴緗戯紙縐佹湁鍦板潃鍩燂級涓殑涓や釜鑺傜偣寰堥毦鐩存帴閫氫俊錛岃岃繖鎭版伆鏄痯2p搴旂敤 (濡傦紝鐢佃瘽浼氳鎴栧湪綰挎父鎴?涓渶鍩烘湰鐨勮姹傘傚緢鏄劇劧錛屾垜浠渶瑕佷竴縐嶆柟娉曞嵆浣垮湪NAT璁懼瀛樺湪鐨勫墠鎻愪笅錛屼粛鐒惰兘澶熸棤闅滅鍦板疄鐜皃2p閫氫俊銆?/div> <div></div> <div>鍦ㄤ笉鍚屽唴緗戠殑涓や釜鑺傜偣涔嬮棿寤虹珛p2p榪炴帴鐨勬渶鏈夋晥鐨勬柟娉曞氨鏄?#8220;鎵撴礊”銆傝鎶鏈湪鍩轟簬UDP鐨勫簲鐢ㄧ▼搴忎腑寰楀埌浜嗗箍娉涚殑搴旂敤錛屽悓鏍風殑錛岃鎶鏈篃鍙互鐢ㄤ簬鍩轟簬TCP鐨勫簲鐢ㄧ▼搴忋傛湁瓚g殑鏄紝涓?#8220;鎵撴礊”瀛楅潰涓婄殑鎰忔濆垰濂界浉鍙嶏紝璇ユ妧鏈笉浼氬獎鍝嶅埌鍐呯綉鐨勫畨鍏ㄣ備簨瀹炰笂錛?#8220;鎵撴礊”鎶鏈嬌寰梡2p杞歡鐨勭粷澶ч儴鍒嗗姛鑳介兘鍦∟AT璁懼榛樿鐨勫畨鍏ㄧ瓥鐣ョ殑鎺у埗涔嬩笅錛岃繖浜涢兘鐢盢AT璁懼寤虹珛鐨剆ession鏉ョ鐞嗐傛湰鏂囬槓榪頒簡閫傜敤浜嶶DP鍜孴CP鐨?#8220;鎵撴礊”鎶鏈紝騫惰緇嗘弿榪頒簡閲嶈“鎵撴礊”榪囩▼涓紝搴旂敤紼嬪簭鍜孨AT璁懼涔嬮棿鐨勮涓恒?/div> <div></div> <div>涓嶅垢鐨勬槸錛岀敱浜嶯AT璁懼鐨勫搷搴斿拰琛屼負涓嶆槸鏍囧噯鐨勶紝鎵浠ユ病鏈変換浣曟妧鏈彲浠ョ┛瓚婄幇鏈夌殑鎵鏈塏AT璁懼銆傛湰鏂囨彁渚涗簡涓浜涘湪鐜版湁NAT璁懼涓婅繘琛?#8220;鎵撴礊”鐨勫疄楠岀粨鏋溿傛垜浠敹闆嗙殑鏁版嵁鏉ヨ嚜浜庝簰鑱旂綉涓婁嬌鐢ㄤ簡“NAT Check”宸ュ叿騫跺湪澶ч噺涓嶅悓鐢熶駭鍘傚晢鐨凬AT璁懼涓婅繘琛?#8220;鎵撴礊”瀹為獙鐨勭敤鎴楓傜敱浜庢暟鎹槸鏉ヨ嚜浜庝竴涓彨鍋?#8220;self-selecting”鐨勭敤鎴風ぞ鍖猴紝鎴栬涓嶄細瀹屽叏浠h〃鍦↖nternet涓婄湡姝i儴緗插拰浣跨敤鐨凬AT璁懼錛屼絾鏄粨鏋滄棤璁哄浣曡繕鏄緢浠や漢鍏村鐨勩?/div> <div></div> <div>鍦ㄥ仛鍩烘湰鐨?#8220;鎵撴礊”鎿嶄綔璇勪及鐨勬椂鍊欙紝鎴戜滑搴旇鎸囧嚭鍦ㄧ幇鏈夌殑NAT璁懼“鎵撴礊”鐨勫鏉傚害涓婏紝涓嶅悓鐨勫鏉傚害浼氭湁涓嶅悓鐨勭粨鏋溿備絾鐩墠鎴戜滑鎶婅璁虹殑閲嶇偣闆嗕腑浜庡紑鍙戞渶綆鍗曠殑錛屽彲浠ュ簲鐢ㄤ簬浠諱綍緗戠粶鎷撴墤緇撴瀯鐨勩佺ǔ瀹氱殑銆佹湁姝g‘NAT鍝嶅簲鐨凬AT璁懼涓婄殑“鎵撴礊”鎶鏈傛垜浠湁鎰忛伩鍏嶄嬌鐢ㄤ竴浜?#8220;鑱槑鐨勫皬鎶婃垙”閫氳繃嬈洪獥鏌愪簺NAT璁懼鏉ヨ揪鍒扮煭鏈熷唴絀胯秺杈冨鐨凬AT璁懼錛屼絾浠庨暱鏈熸潵鐪嬩細寮曡搗緗戠粶鏈煡閿欒鐨勬妧鏈?/div> <div></div> <div>灝界寮曞叆IPv6浼氭瀬澶у湴澧炲姞浜掕仈緗戠殑鍦板潃絀洪棿錛屼粠鑰屽噺灝戝浜嶯AT璁懼鐨勯渶姹傞噺錛屼絾鐭湡鍐匢Pv6紜疄澧炲姞浜嗗NAT璁懼鐨勯渶姹傞噺錛屽洜涓?NAT璁懼鏈韓鎻愪緵浜嗕竴縐嶆柟渚跨殑鏂規硶榪涜IPv4涓嶪Pv6鍦板潃鍩熻漿鎹€傚彟澶栫鏈夌綉緇滀笂寤虹珛鍖垮悕鍜屽姞瀵嗚闂妭鐐逛篃鏈夊埄浜庣粍緇囨満鏋勭殑瀹夊叏鎬т互鍙婁笉鍙楀鐣屽共鎵幫紝榪欎簺閮芥剰鍛崇潃NAT榪樺皢瀛樺湪鐩稿綋闀跨殑涓孌墊椂闂淬傚悓鏍鳳紝闃茬伀澧欐妧鏈篃涓嶄細鐢變簬鏈変簡瓚沖鐨刬p鍦板潃鑰屾秷澶憋紝IPv6鐨勯槻鐏浠嶇劧浼氶粯璁や涪鎺夋墍鏈夋湭緇忔巿鏉冪殑鏁版嵁鍖咃紝浠嶇劧鍙互璁╁湪IPv6鐜涓嬪伐浣滅殑搴旂敤紼嬪簭“鎵撴礊”銆?/div> <div></div> <div>鏈枃鎺ヤ笅鏉ョ殑閮ㄥ垎鎸夌収濡備笅鐨勬柟寮忕粍緇囷細絎簩绔犱粙緇嶅熀鏈殑NAT絀胯秺姒傚康鍜屾湳璇紱絎笁绔犱粙緇峌DP“鎵撴礊”榪囩▼錛涚鍥涚珷浠嬬粛TCP“鎵撴礊”榪囩▼錛涚浜旂珷浠嬬粛鏀寔“鎵撴礊”鐨凬AT璁懼蹇呴』鍏鋒湁閭d簺鐗規э紱絎叚绔犱粙緇嶆垜浠湪鐩墠嫻佽鐨凬AT璁懼涓婄殑“鎵撴礊”瀹為獙緇撴灉錛涚涓冪珷璁ㄨ鐩稿叧鐨勭綉緇滈棶棰橈紱絎叓绔犲叏鏂囨葷粨浠ュ強緇撴潫璇?/div> <div></div> <div>2銆佸熀鏈蹇墊湰鑺備粙緇嶄簡鏈枃浣跨敤鍒扮殑鍩烘湰鐨凬AT鏈錛岀潃閲嶆弿榪頒簡閫傜敤浜嶶DP鍜孴CP涓ょ鍗忚鐨勯氱敤鐨凬AT絀胯秺鎶鏈?/div> <div></div> <div>2.1銆丯AT鏈</div> <div>鏈枃緇濆ぇ閮ㄥ垎鏈鍜屽垎綾繪潵鑷簬RFC 2663瀹氫箟錛屽彟澶栦竴浜涙潵鑷簬杈冩柊鐨凴FC 3489涓殑瀹氫箟銆?/div> <div>鐞嗚Вsession鏄緢閲嶈鐨勩備竴涓猅CP鎴朥DP鐨剆ession endpoint鏄敱涓涓狪P鍦板潃錛岀鍙e彿緇勬垚錛屾瘡涓猻ession鏄敱涓や釜session endpoint鏋勬垚銆備粠鍐呯綉鑺傜偣鐨勮搴︽潵鐪嬶紝涓涓猻ession鐢?閮ㄥ垎緇勬垚鍒嗗埆涓猴細鏈湴IP錛屾湰鍦扮鍙o紝榪滅IP錛岃繙绔鍙c俿ession鐨勬柟鍚戦氬父浠h〃浜嗘暟鎹寘鐨勫垵濮嬫祦鍔ㄧ殑鏂瑰悜錛涘浜嶵CP鏉ヨ灝辨槸SYN鍖呯殑嫻佸悜錛屽浜嶶DP鏉ヨ灝辨槸絎竴涓敤鎴鋒暟鎹寘鐨勬祦鍚戙?/div> <div></div> <div>NAT鏈夊緢澶氱錛屼絾鏈鏅亶鐨勪竴縐嶇被鍨嬪彨鍋?#8220;浼犵粺”NAT錛屾垨鑰?#8220;鍚戝”NAT銆備粬浠湪鍐呯綉鍜屽叕緗戜箣闂存彁渚涗簡涓涓?#8220;涓嶅縐?#8221;妗ョ殑鏄犲皠銆?#8220;鍚戝”NAT鍦ㄩ粯璁ゆ儏鍐典笅鍙厑璁稿悜澶栫殑session絀胯秺NAT錛?/div> <div>浠庡鍚戝唴鐨勭殑鏁版嵁鍖呴兘浼氳涓㈠純鎺夛紝闄ら潪NAT璁懼浜嬪厛宸茬粡瀹氫箟浜嗚繖浜涗粠澶栧悜鍐呯殑鏁版嵁鍖呮槸宸插瓨鍦ㄧ殑鍐呯綉session鐨勪竴閮ㄥ垎銆?/div> <div>“澶栧悜”NAT浼氶犳垚p2p鍗忚鐨勬販涔憋紝鍥犱負褰損2p鐨勫弻鏂瑰喅瀹氬悜鍦ㄤ笉鍚孨AT鍚庨潰鐨勫鏂瑰紑濮嬮氫俊鐨勬椂鍊欙紝鏃犺鍝竴鏂硅瘯鍥懼垵濮嬪寲涓涓猻ession錛屽彟涓鏂圭殑NAT閮戒細鎷掔粷榪欎釜璇鋒眰銆侼AT絀胯秺鐨勬牳蹇冩濇兂灝辨槸璁﹑2p鐨勫弻鏂圭殑NAT鐪嬩笂鍘婚兘鏄?#8220;鍚戝”鐨凬AT銆?/div> <div></div> <div>“鍚戝”NAT鏈変袱縐嶇被鍨嬶細錛?錛?#8220;鍩虹”NAT錛岃NAT鍙漿鎹P鍦板潃錛屼笉杞崲绔彛鍙楓傦紙2錛塏APT(Network Address/Port Translation)NAPT杞崲鏁翠釜session endpoints銆傜敱浜嶯APT鍏佽鍐呯綉鐨勫涓妭鐐歸氳繃鍏變韓鐨勬柟寮忎嬌鐢ㄥ悓涓涓殑鍏叡鐨処P鍦板潃錛屽洜姝わ紝鏀寔NAPT鐨凬AT璁懼鎵嶄細瓚婃潵瓚婂銆傚敖綆℃湰鏂囬氱瘒璁ㄨ鐨勫唴瀹歸兘鏄熀浜庢敮鎸丯APT鐨凬AT璁懼鐨勶紝浣嗚繖浜涜寰嬪拰鎶鏈悓鏍烽傜敤浜?#8220;鍩虹”NAT銆?/div> <div></div> <div>2.2 杞彂鏂瑰紡</div> <div></div> <div>鏈鍙潬浣嗗悓鏃朵篃鏄晥鐜囨渶浣庣殑p2p絀胯秺NAT榪涜閫氫俊鐨勬柟娉曟槸閲囩敤綾諱技C/S鏂瑰紡鐨勮漿鍙戙傚亣瀹氫袱涓妭鐐笰鍜孊姣忎釜鑺傜偣閮芥湁鍚戝鐨凾CP鎴朥DP 榪炴帴錛岃仈鍏ュ叕鍏辯殑宸茬煡鏈嶅姟鍣⊿錛孲鐨勫叕緗慖P鍦板潃鏄?8.181.0.31錛岀鍙e彿鏄?234錛堝鍥?鎵紺猴級,姣忎釜瀹㈡埛绔綅浜庝笉鍚岀殑縐佹湁鍐呯綉涓紝騫朵笖瀹冧滑鐨凬AT璁懼濡ㄧ浜嗗鎴風涔嬮棿鐩存帴鐨刾2p榪炴帴銆傚仛涓哄鐩磋繛鏂規鐨勬浛浠f柟妗堬紝涓や釜瀹㈡埛绔彲浠ュ埄鐢ㄥ叕鍏辯殑鏈嶅姟鍣⊿榪涜娑堟伅鐨勮漿鍙戙備緥濡傦紝A涓轟簡灝嗘秷鎭佺粰 B錛孉鍙渶灝嗘秷鎭彂緇橲錛岀劧鍚庣敱S杞彂緇橞錛岃繖涓榪囩▼灝嗕嬌鐢ˋ涓嶣浜嬪厛涓嶴寤虹珛濂界殑榪炴帴銆?/div> <div> <div><img border="0" alt="" src="http://www.ppcn.net/upload/2008-12/081208225549422.png" /> </div></div> <div>杞彂鏂瑰紡閫氬父鍙兘鍦ㄥ弻鏂瑰鎴風閮借繛鎺ュ埌鏈嶅姟鍣ㄧ殑鏃跺欐湁鏁堛傝繖縐嶆柟寮忕殑緙虹偣鍦ㄤ簬錛屽畠鍋囧畾鏈嶅姟鍣ㄧ殑澶勭悊鑳藉姏鍜岀綉緇滃甫瀹戒互鍙婇氫俊寤惰繜閮芥槸鐞嗘兂鐨勬儏鍐典笅錛屼笉浼氬彈鍒板鎴風涓暟鐨勫獎鍝嶃備絾鏄紝鐢變簬娌℃湁鍏跺畠鐨勬柟娉曡兘澶熷儚杞彂鏂瑰紡閭f牱錛屽彲浠ョ┛瓚婄幇瀛樼殑鎵鏈塏AT璁懼錛屽洜姝ゅ湪鏋勫緩楂樺彲闈犳х殑p2p緋葷粺鐨勬椂鍊欙紝閫氳繃鏈嶅姟鍣ㄨ漿鍙戠殑鏂瑰紡渚濇棫鏄竴涓潪甯告湁鐢ㄧ殑淇濊瘉緋葷粺鍙潬鎬х殑鏂規硶銆俆URN鍗忚瀹氫箟浜嗗浣曞疄鐜板畨鍏ㄧ殑杞彂鏂瑰紡銆?/div> <div></div> <div>2.3 鍙嶅悜榪炴帴鏂瑰紡</div> <div></div> <div>涓浜沺2p鐨勫簲鐢ㄧ▼搴忛噰鐢ㄤ簡鐩存帴浣嗘槸鏈夋墍闄愬埗鐨勬妧鏈潵瀹炵幇NAT絀胯秺錛岃鎶鏈彨鍋?#8220;鍙嶅悜榪炴帴”錛岃繖鏄敤浜庡綋涓や釜鑺傜偣鑱斿叆鏈嶅姟鍣⊿鐨? <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://zuan3344.com" target="_blank">国产精品国产三级国产专播精品人 </a>| <a href="http://sese750.com" target="_blank">香蕉久久国产</a>| <a href="http://3344568.com" target="_blank">久久精品一区中文字幕</a>| <a href="http://qiansemf.com" target="_blank">欧美jizzhd精品欧美巨大免费</a>| <a href="http://fuwu56.com" target="_blank">亚洲乱亚洲高清</a>| <a href="http://72nnnn.com" target="_blank">蜜桃久久精品乱码一区二区</a>| <a href="http://6688zf.com" target="_blank">国产视频精品免费播放</a>| <a href="http://z10669.com" target="_blank">性色一区二区三区</a>| <a href="http://3737520.com" target="_blank">亚洲欧洲综合另类</a>| <a href="http://lysyfls.com" target="_blank">久久精品av麻豆的观看方式</a>| <a href="http://8xyxs1.com" target="_blank">国产日韩精品一区二区三区</a>| <a href="http://830085.com" target="_blank">午夜视频在线观看一区二区三区</a>| <a href="http://www-5013.com" target="_blank">亚洲美女视频在线观看</a>| <a href="http://226671.com" target="_blank">欧美日韩久久精品</a>| <a href="http://by274.com" target="_blank">亚洲视频在线观看三级</a>| <a href="http://www559955.com" target="_blank">亚洲日韩欧美视频一区</a>| <a href="http://baidijs.com" target="_blank">欧美精品成人</a>| <a href="http://jnjpsm.com" target="_blank">一区二区三区高清不卡</a>| <a href="http://677cn.com" target="_blank">9l国产精品久久久久麻豆</a>| <a href="http://911mmm.com" target="_blank">欧美午夜电影在线</a>| <a href="http://yichenep.com" target="_blank">亚洲欧美激情视频在线观看一区二区三区</a>| <a href="http://www49853b.com" target="_blank">亚洲国产成人午夜在线一区</a>| <a href="http://hongzaixian.com" target="_blank">免费h精品视频在线播放</a>| <a href="http://qhzyxcd.com" target="_blank">亚洲三级视频在线观看</a>| <a href="http://www-4012345.com" target="_blank">亚洲国产成人精品久久</a>| <a href="http://345kt.com" target="_blank">欧美日韩午夜</a>| <a href="http://62san.com" target="_blank">小嫩嫩精品导航</a>| <a href="http://baostat.com" target="_blank">欧美一区二区三区另类</a>| <a href="http://www497171a.com" target="_blank">精久久久久久</a>| <a href="http://3233328.com" target="_blank">亚洲高清视频一区二区</a>| <a href="http://hbzbjxzz.com" target="_blank">欧美日韩精品在线观看</a>| <a href="http://710952.com" target="_blank">午夜精品久久久久久99热</a>| <a href="http://023nszz.com" target="_blank">午夜视频精品</a>| <a href="http://345fz.com" target="_blank">亚洲高清色综合</a>| <a href="http://e789a.com" target="_blank">亚洲日韩欧美一区二区在线</a>| <a href="http://ju5558.com" target="_blank">欧美色123</a>| <a href="http://quintostdio.com" target="_blank">久久精品在线免费观看</a>| <a href="http://6w7y.com" target="_blank">免费成人黄色</a>| <a href="http://41818c.com" target="_blank">亚洲一区国产精品</a>| <a href="http://66jj99.com" target="_blank">欧美在线播放</a>| <a href="http://by3259.com" target="_blank">亚洲久久一区</a>| <a href="http://yw133777.com" target="_blank">亚洲综合首页</a>| <a href="http://994745.com" target="_blank">在线欧美日韩</a>| <a href="http://5252bnet.com" target="_blank">亚洲美女啪啪</a>| <a href="http://y66776.com" target="_blank">国产综合激情</a>| <a href="http://yc7878.com" target="_blank">亚洲人成人一区二区三区</a>| <a href="http://com42923.com" target="_blank">国产精品第一页第二页第三页</a>| <a href="http://kan0577.com" target="_blank">欧美在线地址</a>| <a href="http://er65.com" target="_blank">欧美大片在线观看</a>| <a href="http://605012.com" target="_blank">香蕉久久一区二区不卡无毒影院</a>| <a href="http://dadepaimai.com" target="_blank">欧美影视一区</a>| <a href="http://www524141.com" target="_blank">日韩一级二级三级</a>| <a href="http://77427xyz.com" target="_blank">午夜一区不卡</a>| <a href="http://xfrlyy.com" target="_blank">99国内精品久久久久久久软件</a>| <a href="http://1616mz.com" target="_blank">亚洲午夜一级</a>| <a href="http://anxingou365.com" target="_blank">91久久国产精品91久久性色</a>| <a href="http://0359222.com" target="_blank">一区二区三区欧美激情</a>| <a href="http://www4411n.com" target="_blank">黄色成人av网</a>| <a href="http://7777977.com" target="_blank">亚洲视频每日更新</a>| <a href="http://ahqdlq.com" target="_blank">在线日韩一区二区</a>| <a href="http://zyjdxx.com" target="_blank">亚洲一区二区三区色</a>| <a href="http://cca22.com" target="_blank">亚洲激情第一区</a>| <a href="http://k68c.com" target="_blank">亚洲欧美日韩在线高清直播</a>| <a href="http://pabjzz.com" target="_blank">91久久黄色</a>| <a href="http://www-733999.com" target="_blank">欧美一级日韩一级</a>| <a href="http://993934.com" target="_blank">国产精品欧美激情</a>| <a href="http://92ye.com" target="_blank">免费在线亚洲欧美</a>| <a href="http://119553.com" target="_blank">国产精品日产欧美久久久久</a>| <a href="http://6661639.com" target="_blank">欧美激情麻豆</a>| <a href="http://tavbao.com" target="_blank">国产女人水真多18毛片18精品视频</a>| <a href="http://spvicarb.com" target="_blank">欧美成人激情在线</a>| <a href="http://goutoujunshi.com" target="_blank">国产伦精品一区二区</a>| <a href="http://236664.com" target="_blank">最新日韩中文字幕</a>| <a href="http://www8888803.com" target="_blank">在线播放亚洲一区</a>| <a href="http://5757ff.com" target="_blank">亚洲欧美日本国产有色</a>| <a href="http://www11111111.com" target="_blank">999在线观看精品免费不卡网站</a>| <a href="http://8847m.com" target="_blank">久久精品国产亚洲5555</a>| <a href="http://138128.com" target="_blank">亚洲欧美日韩国产一区</a>| <a href="http://maokk77.com" target="_blank">欧美日韩激情网</a>| <a href="http://www-4997.com" target="_blank">欧美成人免费大片</a>| <a href="http://xfrlyy.com" target="_blank">国内揄拍国内精品久久</a>| <a href="http://tp-88.com" target="_blank">亚洲免费网址</a>| <a href="http://kedou09.com" target="_blank">亚洲免费在线精品一区</a>| <a href="http://yyds16.com" target="_blank">欧美精品一区三区在线观看</a>| <a href="http://erodasy.com" target="_blank">欧美激情第4页</a>| <a href="http://4449992.com" target="_blank">在线精品视频一区二区</a>| <a href="http://zqx186.com" target="_blank">久久成人一区</a>| <a href="http://caoliu2022.com" target="_blank">欧美中文字幕不卡</a>| <a href="http://chaxiangmall.com" target="_blank">国产精品久久久久久久免费软件</a>| <a href="http://mauhorng.com" target="_blank">亚洲精品乱码久久久久久蜜桃麻豆</a>| <a href="http://666cmc.com" target="_blank">亚洲大胆人体在线</a>| <a href="http://4106446.com" target="_blank">欧美一区二视频</a>| <a href="http://www38ccc.com" target="_blank">久久er99精品</a>| <a href="http://yiluee.com" target="_blank">国产欧美精品</a>| <a href="http://caogb.com" target="_blank">午夜视频精品</a>| <a href="http://www47067.com" target="_blank">午夜精品久久久久久久99水蜜桃 </a>| <a href="http://kanebocos.com" target="_blank">亚洲午夜三级在线</a>| <a href="http://my17677.com" target="_blank">欧美韩日一区二区</a>| <a href="http://9273829.com" target="_blank">亚洲韩国一区二区三区</a>| <a href="http://677679.com" target="_blank">日韩视频一区二区在线观看 </a>| <a href="http://613by.com" target="_blank">国产精品日韩精品</a>| <a href="http://1069024.com" target="_blank">亚洲图片在区色</a>| <a href="http://133969.com" target="_blank">亚洲欧美日韩精品综合在线观看</a>| <a href="http://www89999.com" target="_blank">欧美三区免费完整视频在线观看</a>| <a href="http://seqingdao.com" target="_blank">日韩午夜免费视频</a>| <a href="http://mascorcg.com" target="_blank">亚洲主播在线播放</a>| <a href="http://951738.com" target="_blank">国产精品一二三四区</a>| <a href="http://889644.com" target="_blank">午夜一区二区三视频在线观看 </a>| <a href="http://diao66.com" target="_blank">欧美在线视频一区二区</a>| <a href="http://4545www.com" target="_blank">国产偷久久久精品专区</a>| <a href="http://www55avav.com" target="_blank">久久av一区二区三区亚洲</a>| <a href="http://jiuzuifusheng.com" target="_blank">久久视频一区</a>| <a href="http://cancerrxa.com" target="_blank">**网站欧美大片在线观看</a>| <a href="http://667939.com" target="_blank">美女国产精品</a>| <a href="http://6673328.com" target="_blank">亚洲精品日韩一</a>| <a href="http://www-699603.com" target="_blank">亚洲女女女同性video</a>| <a href="http://wwwhaodd116.com" target="_blank">国产精品日日摸夜夜添夜夜av</a>| <a href="http://northboiler.com" target="_blank">亚洲一区在线免费</a>| <a href="http://zd-jm.com" target="_blank">久久久99爱</a>| <a href="http://874805.com" target="_blank">欧美一二三区在线观看</a>| <a href="http://mkaqiu.com" target="_blank">国产精品视频一二三</a>| <a href="http://lianjiemenye.com" target="_blank">99这里只有精品</a>| <a href="http://www33779.com" target="_blank">欧美一区二区三区免费视</a>| <a href="http://478884.com" target="_blank">国产一区二区三区四区三区四 </a>| <a href="http://maomi998.com" target="_blank">国产精品视频yy9299一区</a>| <a href="http://3531888.com" target="_blank">欧美一区二区三区视频在线</a>| <a href="http://bjayj.com" target="_blank">免费看成人av</a>| <a href="http://880895.com" target="_blank">亚洲素人在线</a>| <a href="http://wogoyao.com" target="_blank">激情婷婷欧美</a>| <a href="http://sinojinxing.com" target="_blank">欧美日韩精选</a>| <a href="http://794238.com" target="_blank">欧美中文字幕视频在线观看</a>| <a href="http://haochen072.com" target="_blank">蜜桃av综合</a>| <a href="http://www24668.com" target="_blank">亚洲一区二区成人在线观看</a>| <a href="http://chongpiapia.com" target="_blank">国产伦精品一区</a>| <a href="http://97sgg.com" target="_blank">欧美成人高清视频</a>| <a href="http://848585.com" target="_blank">亚洲专区在线视频</a>| <a href="http://4449998.com" target="_blank">欧美二区在线播放</a>| <a href="http://1177898.com" target="_blank">亚洲欧美日韩精品久久</a>| <a href="http://www17727.com" target="_blank">亚洲国产成人在线</a>| <a href="http://js6996.com" target="_blank">国产精品麻豆va在线播放</a>| <a href="http://6966g.com" target="_blank">久久久www成人免费精品</a>| <a href="http://b476.com" target="_blank">日韩视频一区二区在线观看 </a>| <a href="http://www-876810.com" target="_blank">欧美亚洲一区</a>| <a href="http://136hao.com" target="_blank">亚洲人成免费</a>| <a href="http://haochen072.com" target="_blank">久久久久久综合网天天</a>| <a href="http://ewaygou.com" target="_blank">99精品视频一区</a>| <a href="http://by56677.com" target="_blank">海角社区69精品视频</a>| <a href="http://555hhu.com" target="_blank">欧美日韩在线视频一区</a>| <a href="http://www24668.com" target="_blank">久久视频在线免费观看</a>| <a href="http://1188188.com" target="_blank">亚洲影院免费</a>| <a href="http://bocai4488.com" target="_blank">亚洲欧洲另类国产综合</a>| <a href="http://yunyang0991.com" target="_blank">久久久亚洲精品一区二区三区</a>| <a href="http://my8823.com" target="_blank">一本综合久久</a>| <a href="http://hkjccc.com" target="_blank">亚洲国内高清视频</a>| <a href="http://zisxks.com" target="_blank">国产亚洲一区二区精品</a>| <a href="http://aa224.com" target="_blank">欧美视频福利</a>| <a href="http://97caoporm.com" target="_blank">欧美大香线蕉线伊人久久国产精品</a>| <a href="http://kaijiepharm.com" target="_blank">亚洲欧美国产另类</a>| <a href="http://wwwp6660.com" target="_blank">9色精品在线</a>| <a href="http://1369080.com" target="_blank">亚洲黄一区二区</a>| <a href="http://www520590.com" target="_blank">葵司免费一区二区三区四区五区</a>| <a href="http://994745.com" target="_blank">亚洲欧美日韩一区二区</a>| <a href="http://1188188.com" target="_blank">99精品99</a>| <a href="http://www25sds.com" target="_blank">亚洲精品孕妇</a>| <a href="http://91ymz.com" target="_blank">最新亚洲视频</a>| <a href="http://628155.com" target="_blank">亚洲第一福利视频</a>| <a href="http://3333577.com" target="_blank">国产又爽又黄的激情精品视频</a>| <a href="http://www-444454.com" target="_blank">欧美视频在线一区</a>| <a href="http://nachang5117.com" target="_blank">欧美激情一区二区三区蜜桃视频</a>| <a href="http://ehagakii.com" target="_blank">久久精品国产亚洲一区二区</a>| <a href="http://www-4564949.com" target="_blank">中文日韩在线视频</a>| <a href="http://888ppxx.com" target="_blank">一本色道久久88综合日韩精品</a>| <a href="http://xjhzgy.com" target="_blank">亚洲大片在线</a>| <a href="http://492541.com" target="_blank">欧美多人爱爱视频网站</a>| <a href="http://921367.com" target="_blank">欧美xxxx在线观看</a>| <a href="http://2589999.com" target="_blank">久久精品国产成人</a>| <a href="http://fangsling.com" target="_blank">欧美一区二区性</a>| <a href="http://qqcf9900.com" target="_blank">亚洲欧美日韩一区</a>| <a href="http://021-job.com" target="_blank">亚洲欧美国产日韩中文字幕</a>| <a href="http://cecelife.com" target="_blank">亚洲一区尤物</a>| <a href="http://26thb.com" target="_blank">亚洲你懂的在线视频</a>| <a href="http://shght.com" target="_blank">亚洲免费一级电影</a>| <a href="http://by3799.com" target="_blank">亚洲欧美综合精品久久成人</a>| <a href="http://4hup23.com" target="_blank">亚洲伊人网站</a>| <a href="http://223zzz.com" target="_blank">欧美亚洲一区二区三区</a>| <a href="http://787299.com" target="_blank">欧美亚洲综合网</a>| <a href="http://058888e.com" target="_blank">欧美与欧洲交xxxx免费观看 </a>| <a href="http://sdluliang.com" target="_blank">欧美性事在线</a>| <a href="http://888nei.com" target="_blank">欧美日本在线看</a>| <a href="http://tigerpowerinc.com" target="_blank">欧美波霸影院</a>| <a href="http://pppp95.com" target="_blank">欧美精品在线极品</a>| <a href="http://by777131.com" target="_blank">欧美精品亚洲精品</a>| <a href="http://4438x28.com" target="_blank">欧美日本国产精品</a>| <a href="http://689658.com" target="_blank">欧美午夜视频一区二区</a>| <a href="http://765409.com" target="_blank">欧美日韩亚洲不卡</a>| <a href="http://www44448.com" target="_blank">国产精品成人免费视频</a>| <a href="http://bocai4488.com" target="_blank">国产精品日韩精品欧美精品</a>| <a href="http://sdkingpin.com" target="_blank">国产日韩欧美精品在线</a>| <a href="http://ebmsci.com" target="_blank">国内精品久久久</a>| <a href="http://vvv3939.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>