锘??xml version="1.0" encoding="utf-8" standalone="yes"?> int setsockopt( s(濂楁帴瀛?: 鎸囧悜涓涓墦寮鐨勫鎺ュ彛鎻忚堪瀛?
SOCKET s,
int level,
int optname,
const char* optval,
int optlen
);
level:(綰у埆)錛?#160;鎸囧畾閫夐」浠g爜鐨勭被鍨嬨?
SOL_SOCKET: 鍩烘湰濂楁帴鍙?#160;
IPPROTO_IP: IPv4濂楁帴鍙?#160;
IPPROTO_IPV6: IPv6濂楁帴鍙?#160;
IPPROTO_TCP: TCP濂楁帴鍙?#160;
optname(閫夐」鍚?錛?#160;閫夐」鍚嶇О
optval(閫夐」鍊?: 鏄竴涓寚鍚戝彉閲忕殑鎸囬拡 綾誨瀷錛氭暣褰紝濂楁帴鍙g粨鏋勶紝 鍏朵粬緇撴瀯綾誨瀷:linger{}, timeval{ }
optlen(閫夐」闀垮害) 錛歰ptval 鐨勫ぇ灝?#160;
榪斿洖鍊鹼細(xì)鏍囧織鎵撳紑鎴栧叧闂煇涓壒寰佺殑浜岃繘鍒墮夐」
[/code:1:59df4ce128]
========================================================================
SOL_SOCKET
------------------------------------------------------------------------
SO_BROADCAST 鍏佽鍙戦佸箍鎾暟鎹?#160;int
閫傜敤鏂?#160;UDP socket銆傚叾鎰忎箟鏄厑璁?#160;UDP socket 銆屽箍鎾嶏紙broadcast錛夎鎭埌緗戣礬涓娿?
SO_DEBUG 鍏佽璋冭瘯 int
SO_DONTROUTE 涓嶆煡鎵捐礬鐢?#160;int
SO_ERROR 鑾峰緱濂楁帴瀛楅敊璇?#160;int
SO_KEEPALIVE 淇濇寔榪炴帴 int
媯(gè)嫻嬪鏂逛富鏈烘槸鍚﹀穿婧冿紝閬垮厤錛堟湇鍔″櫒錛夋案榪滈樆濉炰簬TCP榪炴帴鐨勮緭鍏ャ?#160;璁劇疆璇ラ夐」鍚庯紝濡傛灉2灝忔椂鍐呭湪姝ゅ鎺ュ彛鐨勪換涓鏂瑰悜閮芥病鏈夋暟鎹氦鎹紝TCP灝辮嚜鍔ㄧ粰瀵規(guī)柟 鍙戜竴涓繚鎸佸瓨?gòu)z繪帰嫻嬪垎鑺?keepalive probe)銆傝繖鏄竴涓鏂瑰繀欏誨搷搴旂殑TCP鍒嗚妭.瀹冧細(xì)瀵艱嚧浠ヤ笅涓夌鎯呭喌錛?#160;瀵規(guī)柟鎺ユ敹涓鍒囨甯革細(xì)浠ユ湡鏈涚殑ACK鍝嶅簲銆?灝忔椂鍚庯紝TCP灝嗗彂鍑哄彟涓涓帰嫻嬪垎鑺傘?#160;瀵規(guī)柟宸插穿婧冧笖宸查噸鏂板惎鍔細(xì)浠ST鍝嶅簲銆傚鎺ュ彛鐨勫緟澶勭悊閿欒琚疆涓篍CONNRESET錛屽鎺?#160;鍙f湰韜垯琚叧闂?#160;瀵規(guī)柟鏃犱換浣曞搷搴旓細(xì)婧愯嚜berkeley鐨凾CP鍙戦佸彟澶?涓帰嫻嬪垎鑺傦紝鐩擱殧75縐掍竴涓紝璇曞浘寰楀埌 涓涓搷搴斻傚湪鍙戝嚭絎竴涓帰嫻嬪垎鑺?1鍒嗛挓15縐掑悗鑻ヤ粛鏃犲搷搴斿氨鏀懼純銆傚鎺ュ彛鐨勫緟澶勭悊閿?#160;璇緗負(fù)ETIMEOUT錛屽鎺ュ彛鏈韓鍒欒鍏抽棴銆傚ICMP閿欒鏄?#8220;host unreachable(涓繪満涓?#160;鍙揪)”錛岃鏄庡鏂逛富鏈哄茍娌℃湁宕╂簝錛屼絾鏄笉鍙揪錛岃繖縐嶆儏鍐典笅寰呭鐞嗛敊璇緗負(fù) EHOSTUNREACH銆?#160;
SO_DONTLINGER 鑻ヤ負(fù)鐪燂紝鍒橲O_LINGER閫夐」琚姝€?
SO_LINGER 寤惰繜鍏抽棴榪炴帴 struct linger
涓婇潰榪欎袱涓夐」褰卞搷close琛屼負(fù)
閫夐」 闂撮殧 鍏抽棴鏂瑰紡 絳夊緟鍏抽棴涓庡惁
SO_DONTLINGER 涓嶅叧蹇?#160;浼橀泤 鍚?
SO_LINGER 闆?#160;寮哄埗 鍚?
SO_LINGER 闈為浂 浼橀泤 鏄?
鑻ヨ緗簡(jiǎn)SO_LINGER錛堜害鍗砽inger緇撴瀯涓殑l_onoff鍩熻涓洪潪闆訛紝鍙傝2.4錛?.1.7鍜?.1.21鍚勮妭錛夛紝騫惰緗簡(jiǎn)闆惰秴鏃墮棿闅旓紝鍒檆losesocket()涓嶈闃誨绔嬪嵆鎵ц錛屼笉璁烘槸鍚︽湁鎺掗槦鏁版嵁鏈彂閫佹垨鏈紜銆傝繖縐嶅叧闂柟寮忕О涓?#8220;寮哄埗”鎴?#8220;澶辨晥”鍏抽棴錛屽洜涓哄鎺ュ彛鐨勮櫄鐢?shù)璧\绔嬪嵆琚浣嶏紝涓斾涪澶變簡(jiǎn)鏈彂閫佺殑鏁版嵁銆傚湪榪滅鐨剅ecv()璋冪敤灝嗕互WSAECONNRESET鍑洪敊銆?
鑻ヨ緗簡(jiǎn)SO_LINGER騫剁‘瀹氫簡(jiǎn)闈為浂鐨勮秴鏃墮棿闅旓紝鍒檆losesocket()璋冪敤闃誨榪涚▼錛岀洿鍒版墍鍓╂暟鎹彂閫佸畬姣曟垨瓚呮椂銆傝繖縐嶅叧闂О涓?#8220;浼橀泤鐨?#8221;鍏抽棴銆傝娉ㄦ剰濡傛灉濂楁帴鍙g疆涓洪潪闃誨涓擲O_LINGER璁句負(fù)闈為浂瓚呮椂錛屽垯closesocket()璋冪敤灝嗕互WSAEWOULDBLOCK閿欒榪斿洖銆?
鑻ュ湪涓涓祦綾誨鎺ュ彛涓婅緗簡(jiǎn)SO_DONTLINGER錛堜篃灝辨槸璇村皢linger緇撴瀯鐨刲_onoff鍩熻涓洪浂錛涘弬瑙?.4錛?.1.7錛?.1.21鑺傦級(jí)錛屽垯closesocket()璋冪敤绔嬪嵆榪斿洖銆備絾鏄紝濡傛灉鍙兘錛屾帓闃熺殑鏁版嵁灝嗗湪濂楁帴鍙e叧闂墠鍙戦併傝娉ㄦ剰錛屽湪榪欑鎯呭喌涓媁INDOWS濂楁帴鍙e疄鐜板皢鍦ㄤ竴孌典笉紜畾鐨勬椂闂村唴淇濈暀濂楁帴鍙d互鍙?qiáng)鍏朵粬璧勬簮锛寴q欏浜庢兂鐢ㄦ墍浠ュ鎺ュ彛鐨勫簲鐢ㄧ▼搴忔潵璇存湁涓瀹氬獎(jiǎng)鍝嶃?
SO_OOBINLINE 甯﹀鏁版嵁鏀懼叆姝e父鏁版嵁嫻?鍦ㄦ櫘閫氭暟鎹祦涓帴鏀跺甫澶栨暟鎹?#160;int
SO_RCVBUF 鎺ユ敹緙撳啿鍖哄ぇ灝?#160;int
璁劇疆鎺ユ敹緙撳啿鍖虹殑淇濈暀澶у皬
涓?#160;SO_MAX_MSG_SIZE 鎴朤CP婊戝姩紿楀彛鏃犲叧錛屽鏋滀竴鑸彂閫佺殑鍖呭緢澶у緢棰戠箒錛岄偅涔堜嬌鐢ㄨ繖涓夐」
SO_SNDBUF 鍙戦佺紦鍐插尯澶у皬 int
璁劇疆鍙戦佺紦鍐插尯鐨勪繚鐣欏ぇ灝?
涓?#160;SO_MAX_MSG_SIZE 鎴朤CP婊戝姩紿楀彛鏃犲叧錛屽鏋滀竴鑸彂閫佺殑鍖呭緢澶у緢棰戠箒錛岄偅涔堜嬌鐢ㄨ繖涓夐」
姣忎釜濂楁帴鍙i兘鏈変竴涓彂閫佺紦鍐插尯鍜屼竴涓帴鏀剁紦鍐插尯銆?#160;鎺ユ敹緙撳啿鍖鴻TCP鍜孶DP鐢ㄦ潵灝嗘帴鏀跺埌鐨勬暟鎹竴鐩翠繚瀛樺埌鐢卞簲鐢ㄨ繘紼嬫潵璇匯?#160;TCP錛歍CP閫氬憡鍙︿竴绔殑紿楀彛澶у皬銆?#160;TCP濂楁帴鍙f帴鏀剁紦鍐插尯涓嶅彲鑳芥孩鍑猴紝鍥犱負(fù)瀵規(guī)柟涓嶅厑璁稿彂鍑?guó)櫠厴q囨墍閫氬憡紿楀彛澶у皬鐨勬暟鎹?#160;榪欏氨鏄疶CP鐨勬祦閲忔帶鍒訛紝濡傛灉瀵規(guī)柟鏃犺紿楀彛澶у皬鑰屽彂鍑轟簡(jiǎn)瓚呰繃瀹欏彛澶у皬鐨勬暟鎹紝鍒欐帴 鏀舵柟TCP灝嗕涪寮冨畠銆?#160;UDP錛氬綋鎺ユ敹鍒扮殑鏁版嵁鎶ヨ涓嶈繘濂楁帴鍙f帴鏀剁紦鍐插尯鏃訛紝姝ゆ暟鎹姤灝辮涓㈠純銆俇DP鏄病鏈?#160;嫻侀噺鎺у埗鐨勶紱蹇殑鍙戦佽呭彲浠ュ緢瀹規(guī)槗鍦板氨娣規(guī)病鎱㈢殑鎺ユ敹鑰咃紝瀵艱嚧鎺ユ敹鏂圭殑UDP涓㈠純鏁版嵁鎶ャ?
SO_RCVLOWAT 鎺ユ敹緙撳啿鍖轟笅闄?#160;int
SO_SNDLOWAT 鍙戦佺紦鍐插尯涓嬮檺 int
姣忎釜濂楁帴鍙i兘鏈変竴涓帴鏀朵綆娼檺搴﹀拰涓涓彂閫佷綆娼檺搴︺傚畠浠槸鍑芥暟selectt浣跨敤鐨勶紝 鎺ユ敹浣庢疆闄愬害鏄select榪斿洖“鍙”鑰屽湪濂楁帴鍙f帴鏀剁紦鍐插尯涓繀欏繪湁鐨勬暟鎹婚噺銆?#160;鈥斺斿浜庝竴涓猅CP鎴朥DP濂楁帴鍙o紝姝ゅ肩己鐪佷負(fù)1銆傚彂閫佷綆娼檺搴︽槸璁﹕elect榪斿洖“鍙啓” 鑰屽湪濂楁帴鍙e彂閫佺紦鍐插尯涓繀欏繪湁鐨勫彲鐢ㄧ┖闂淬傚浜嶵CP濂楁帴鍙o紝姝ゅ煎父緙虹渷涓?048銆?#160;瀵逛簬UDP浣跨敤浣庢疆闄愬害錛?#160;鐢變簬鍏跺彂閫佺紦鍐插尯涓彲鐢ㄧ┖闂寸殑瀛楄妭鏁版槸浠庝笉鍙樺寲鐨勶紝鍙 UDP濂楁帴鍙e彂閫佺紦鍐插尯澶у皬澶т簬濂楁帴鍙g殑浣庢疆闄愬害錛岃繖鏍風(fēng)殑UDP濂楁帴鍙e氨鎬繪槸鍙啓鐨勩?#160;UDP娌℃湁鍙戦佺紦鍐插尯錛屽彧鏈夊彂閫佺紦鍐插尯鐨勫ぇ灝忋?
SO_RCVTIMEO 鎺ユ敹瓚呮椂 struct timeval
SO_SNDTIMEO 鍙戦佽秴鏃?#160;struct timeval
SO_REUSERADDR 鍏佽閲嶇敤鏈湴鍦板潃鍜岀鍙?#160;int
鍏呰緇戝畾宸茶浣跨敤鐨勫湴鍧錛堟垨绔彛鍙鳳級(jí)錛屽彲浠ュ弬鑰僢ind鐨刴an
SO_EXCLUSIVEADDRUSE
鐙崰妯″紡浣跨敤绔彛,灝辨槸涓嶅厖璁稿拰鍏跺畠紼嬪簭浣跨敤SO_REUSEADDR鍏變韓鐨勪嬌鐢ㄦ煇涓绔彛銆?
鍦ㄧ‘瀹氬閲嶇粦瀹氫嬌鐢ㄨ皝鐨勬椂鍊欙紝鏍規(guī)嵁涓鏉″師鍒欐槸璋佺殑鎸囧畾鏈鏄庣‘鍒欏皢鍖呴掍氦緇欒皝錛岃屼笖娌℃湁鏉冮檺涔嬪垎錛屼篃灝辨槸璇翠綆綰ф潈闄愮殑鐢ㄦ埛鏄彲浠ラ噸緇戝畾鍦ㄩ珮綰ф潈闄愬鏈嶅姟鍚姩鐨勭鍙d笂鐨?榪欐槸闈炲父閲嶅ぇ鐨勪竴涓畨鍏ㄩ殣鎮(zhèn)?
濡傛灉涓嶆兂璁╄嚜宸辯▼搴忚鐩戝惉錛岄偅涔堜嬌鐢ㄨ繖涓夐」
SO_TYPE 鑾峰緱濂楁帴瀛楃被鍨?#160;int
SO_BSDCOMPAT 涓嶣SD緋葷粺鍏煎 int
==========================================================================
IPPROTO_IP
--------------------------------------------------------------------------
IP_HDRINCL 鍦ㄦ暟鎹寘涓寘鍚獻(xiàn)P棣栭儴 int
榪欎釜閫夐」甯哥敤浜庨粦瀹㈡妧鏈腑錛岄殣钘忚嚜宸辯殑IP鍦板潃
IP_OPTINOS IP棣栭儴閫夐」 int
IP_TOS 鏈嶅姟綾誨瀷
IP_TTL 鐢熷瓨鏃墮棿 int
浠ヤ笅IPV4閫夐」鐢ㄤ簬緇勬挱
IPv4 閫夐」 鏁版嵁綾誨瀷 鎻?#160;榪?
銆銆IP_ADD_MEMBERSHIP struct ip_mreq 鍔犲叆鍒扮粍鎾粍涓?
銆銆IP_ROP_MEMBERSHIP struct ip_mreq 浠庣粍鎾粍涓鍑?
銆銆IP_MULTICAST_IF struct ip_mreq 鎸囧畾鎻愪氦緇勬挱鎶ユ枃鐨勬帴鍙?
銆銆IP_MULTICAST_TTL u_char 鎸囧畾鎻愪氦緇勬挱鎶ユ枃鐨凾TL
銆銆IP_MULTICAST_LOOP u_char 浣跨粍鎾姤鏂囩幆璺湁鏁堟垨鏃犳晥
鍦ㄥご鏂囦歡涓畾涔変簡(jiǎn)ip_mreq緇撴瀯錛?
[code:1:63724de67f]
struct ip_mreq {
struct in_addr imr_multiaddr; /* IP multicast address of group */
struct in_addr imr_interface; /* local IP address of interface */
};
[/code:1:63724de67f]
鑻ヨ繘紼嬭鍔犲叆鍒頒竴涓粍鎾粍涓紝鐢╯oket鐨剆etsockopt()鍑芥暟鍙戦佽閫夐」銆傝閫夐」綾誨瀷鏄痠p_mreq緇撴瀯錛屽畠鐨勭涓涓瓧孌礽mr_multiaddr鎸囧畾浜?jiǎn)缁勬挱缁勭殑鍦板潃錛岀浜屼釜瀛楁imr_interface鎸囧畾浜?jiǎn)鎺ュ彛鐨処Pv4鍦板潃銆?
銆銆IP_DROP_MEMBERSHIP
銆銆璇ラ夐」鐢ㄦ潵浠庢煇涓粍鎾粍涓鍑恒傛暟鎹粨鏋刬p_mreq鐨勪嬌鐢ㄦ柟娉曚笌涓婇潰鐩稿悓銆?
銆銆IP_MULTICAST_IF
銆銆璇ラ夐」鍙互淇敼緗戠粶鎺ュ彛錛屽湪緇撴瀯ip_mreq涓畾涔夋柊鐨勬帴鍙c?
銆銆IP_MULTICAST_TTL
銆銆璁劇疆緇勬挱鎶ユ枃鐨勬暟鎹寘鐨凾TL錛堢敓瀛樻椂闂達(dá)級(jí)銆傞粯璁ゅ兼槸1錛岃〃紺烘暟鎹寘鍙兘鍦ㄦ湰鍦扮殑瀛愮綉涓紶閫併?
銆銆IP_MULTICAST_LOOP
銆銆緇勬挱緇勪腑鐨勬垚鍛樿嚜宸變篃浼?xì)鏀跺埌瀹冨悜鏈l勫彂閫佺殑鎶ユ枃銆傝繖涓夐」鐢ㄤ簬閫夋嫨鏄惁嬋媧昏繖縐嶇姸鎬併?br>
鏃犲弻 鍥炲浜庯細(xì)2003-05-08
21:21:52
IPPRO_TCP
--------------------------------------------------------------------------
TCP_MAXSEG TCP鏈澶ф暟鎹鐨勫ぇ灝?#160;int
鑾峰彇鎴栬緗甌CP榪炴帴鐨勬渶澶у垎鑺傚ぇ灝?MSS)銆傝繑鍥炲兼槸鎴戜滑鐨凾CP鍙戦佺粰鍙︿竴绔殑鏈澶?#160;鏁版嵁閲忥紝瀹冨父甯稿氨鏄敱鍙︿竴绔敤SYN鍒嗚妭閫氬憡鐨凪SS錛岄櫎闈炴垜浠殑TCP閫夋嫨浣跨敤涓涓瘮 瀵規(guī)柟閫氬憡鐨凪SS灝忎簺鐨勫箋傚鏋滄鍊煎湪濂楁帴鍙h繛鎺ヤ箣鍓嶅彇寰楋紝鍒欒繑鍥炲間負(fù)鏈粠鍙?#183;鈥旂 鏀跺埌Mss閫夐」鐨勬儏鍐典笅鎵鐢ㄧ殑緙虹渷鍊箋傚皬浜庢榪斿洖鍊肩殑淇″彲鑳界湡姝g敤鍦ㄨ繛鎺ヤ笂錛屽洜涓鴻 濡傝浣跨敤鏃墮棿鎴抽夐」鐨勮瘽錛屽畠鍦ㄦ瘡涓垎鑺備笂鍗犵敤12瀛楄妭鐨凾CP閫夐」瀹歸噺銆傛垜浠殑TcP灝?#160;鍙戦佺殑姣忎釜鍒嗚妭鐨勬渶澶ф暟鎹噺涔熷彲鍦ㄨ繛鎺ュ瓨?gòu)z繪湡鍐呮敼鍙橈紝浣嗗墠鎻愭槸TCP瑕佹敮鎸佽礬寰凪TU 鍙戠幇鍔熻兘銆傚鏋滃埌瀵規(guī)柟鐨勮礬寰勬敼鍙樹簡(jiǎn)錛屾鍊煎彲涓婁笅璋冩暣銆?
TCP_NODELAY 涓嶄嬌鐢∟agle綆楁硶 int
鎸囧畾TCP寮濮嬪彂閫佷繚鎸佸瓨?gòu)z繪帰嫻嬪垎鑺傚墠浠ョ涓哄崟浣嶇殑榪炴帴絀洪棽鏃墮棿銆傜己鐪佸艱嚦灝戝繀欏諱負(fù)7200縐掞紝鍗?灝忔椂銆傛閫夐」浠呭湪SO_KEPALIVEE濂楁帴鍙i夐」鎵撳紑鏃舵墠鏈夋晥銆?
TCP_NODELAY 鍜?#160;TCP_CORK錛?
榪欎袱涓夐」閮藉緗戠粶榪炴帴鐨勮涓哄叿鏈夐噸瑕佺殑浣滅敤銆傝澶歎NIX緋葷粺閮藉疄鐜頒簡(jiǎn)TCP_NODELAY閫夐」錛屼絾鏄紝TCP_CORK鍒欐槸Linux緋葷粺鎵鐙湁鐨勮屼笖鐩稿杈冩柊錛涘畠棣栧厛鍦ㄥ唴鏍哥増鏈?.4涓婂緱浠ュ疄鐜般傛澶栵紝鍏朵粬UNIX緋葷粺鐗堟湰涔熸湁鍔熻兘綾諱技鐨勯夐」錛屽煎緱娉ㄦ剰鐨勬槸錛屽湪鏌愮鐢盉SD媧劇敓鐨勭郴緇熶笂鐨凾CP_NOPUSH閫夐」鍏跺疄灝辨槸TCP_CORK鐨勪竴閮ㄥ垎鍏蜂綋瀹炵幇銆?
TCP_NODELAY鍜孴CP_CORK鍩烘湰涓婃帶鍒朵簡(jiǎn)鍖呯殑“Nagle鍖?#8221;錛孨agle鍖栧湪榪欓噷鐨勫惈涔夋槸閲囩敤Nagle綆楁硶鎶婅緝?yōu)畯鐨勫寘缁勮湄?fù)鏇村ぇ鐨勫撫銆侸ohn Nagle鏄疦agle綆楁硶鐨勫彂鏄庝漢錛屽悗鑰呭氨鏄敤浠栫殑鍚嶅瓧鏉ュ懡鍚嶇殑錛屼粬鍦?984騫撮嬈$敤榪欑鏂規(guī)硶鏉ュ皾璇曡В鍐崇鐗規(guī)苯杞﹀叕鍙哥殑緗戠粶鎷ュ闂錛堟浜?jiǎn)瑙h鎯呰鍙傜湅IETF RFC 896錛夈備粬瑙e喅鐨勯棶棰樺氨鏄墍璋撶殑silly window syndrome 錛屼腑鏂囩О“鎰氳牏紿楀彛鐥囧欑兢”錛屽叿浣撳惈涔夋槸錛屽洜涓烘櫘閬嶇粓绔簲鐢ㄧ▼搴忔瘡浜х敓涓嬈″嚮閿搷浣滃氨浼?xì)鍙戦佷竴涓寘錛岃屽吀鍨嬫儏鍐典笅涓涓寘浼?xì)鎷ユ湁涓涓瓧鑺傜殑鏁版嵁杞借嵎浠ュ強(qiáng)40涓瓧鑺傞暱鐨勫寘澶達(dá)紝浜庢槸浜х敓4000%鐨勮繃杞斤紝寰堣交鏄撳湴灝辮兘浠ょ綉緇滃彂鐢熸嫢濉?銆?#160;Nagle鍖栧悗鏉ユ垚浜?jiǎn)涓縐嶆爣鍑嗗茍涓旂珛鍗沖湪鍥犵壒緗戜笂寰椾互瀹炵幇銆傚畠鐜板湪宸茬粡鎴愪負(fù)緙虹渷閰嶇疆浜?jiǎn)锛屼絾鍦ㄦ垜浠湅鏉ュQ屾湁浜涘満鍚堜笅鎶婅繖涓閫夐」鍏蟲帀涔熸槸鍚堜箮闇瑕佺殑銆?
鐜板湪璁╂垜浠亣璁炬煇涓簲鐢ㄧ▼搴忓彂鍑轟簡(jiǎn)涓涓姹傦紝甯屾湜鍙戦佸皬鍧楁暟鎹傛垜浠彲浠ラ夋嫨绔嬪嵆鍙戦佹暟鎹垨鑰呯瓑寰呬駭鐢熸洿澶氱殑鏁版嵁鐒跺悗鍐嶄竴嬈″彂閫佷袱縐嶇瓥鐣ャ傚鏋滄垜浠┈涓婂彂閫佹暟鎹紝閭d箞浜や簰鎬х殑浠ュ強(qiáng)瀹㈡埛/鏈嶅姟鍣ㄥ瀷鐨勫簲鐢ㄧ▼搴忓皢鏋佸ぇ鍦板彈鐩娿備緥濡傦紝褰撴垜浠鍦ㄥ彂閫佷竴涓緝鐭殑璇鋒眰騫朵笖絳夊欒緝澶х殑鍝嶅簲鏃訛紝鐩稿叧榪囪澆涓庝紶杈撶殑鏁版嵁鎬婚噺鐩告瘮灝變細(xì)姣旇緝浣庯紝鑰屼笖錛屽鏋滆姹傜珛鍗沖彂鍑洪偅涔堝搷搴旀椂闂翠篃浼?xì)蹇竴浜涖備互涓婃搷浣滃彲浠ラ氳繃璁劇疆濂楁帴瀛楃殑TCP_NODELAY閫夐」鏉ュ畬鎴愶紝榪欐牱灝辯鐢ㄤ簡(jiǎn)Nagle綆楁硶銆?
鍙﹀涓縐嶆儏鍐靛垯闇瑕佹垜浠瓑鍒版暟鎹噺杈懼埌鏈澶ф椂鎵嶉氳繃緗戠粶涓嬈″彂閫佸叏閮ㄦ暟鎹紝榪欑鏁版嵁浼犺緭鏂瑰紡鏈夌泭浜庡ぇ閲忔暟鎹殑閫氫俊鎬ц兘錛屽吀鍨嬬殑搴旂敤灝辨槸鏂囦歡鏈嶅姟鍣ㄣ傚簲鐢∟agle綆楁硶鍦ㄨ繖縐嶆儏鍐典笅灝變細(xì)浜х敓闂銆備絾鏄紝濡傛灉浣犳鍦ㄥ彂閫佸ぇ閲忔暟鎹紝浣犲彲浠ヨ緗甌CP_CORK閫夐」紱佺敤Nagle鍖栵紝鍏舵柟寮忔濂藉悓TCP_NODELAY鐩稿弽錛圱CP_CORK 鍜?#160;TCP_NODELAY 鏄簰鐩告帓鏂ョ殑錛夈備笅闈㈠氨璁╂垜浠粩緇嗗垎鏋愪笅鍏跺伐浣滃師鐞嗐?
鍋囪搴旂敤紼嬪簭浣跨敤sendfile()鍑芥暟鏉ヨ漿縐誨ぇ閲忔暟鎹傚簲鐢ㄥ崗璁氬父瑕佹眰鍙戦佹煇浜涗俊鎭潵棰勫厛瑙i噴鏁版嵁錛岃繖浜涗俊鎭叾瀹炲氨鏄姤澶村唴瀹廣傚吀鍨嬫儏鍐典笅鎶ュご寰堝皬錛岃屼笖濂楁帴瀛椾笂璁劇疆浜?jiǎn)TCP_NODELAY銆傛湁鎶ュご鐨勫寘灝嗚绔嬪嵆浼犺緭錛屽湪鏌愪簺鎯呭喌涓嬶紙鍙栧喅浜庡唴閮ㄧ殑鍖呰鏁板櫒錛夛紝鍥犱負(fù)榪欎釜鍖呮垚鍔熷湴琚鏂規(guī)敹鍒板悗闇瑕佽姹傚鏂圭‘璁ゃ傝繖鏍鳳紝澶ч噺鏁版嵁鐨勪紶杈撳氨浼?xì)琚帹杩熻屼笖浜х敓浜?jiǎn)涓嶅繀瑕佺殑缃懢l滄祦閲忎氦鎹€?
浣嗘槸錛屽鏋滄垜浠湪濂楁帴瀛椾笂璁劇疆浜?jiǎn)TCP_CORK錛堝彲浠ユ瘮鍠諱負(fù)鍦ㄧ閬撲笂鎻掑叆“濉炲瓙”錛夐夐」錛屽叿鏈夋姤澶寸殑鍖呭氨浼?xì)濉ˉ澶ч噺鐨勬暟鎹Q屾墍鏈夌殑鏁版嵁閮芥牴鎹ぇ灝忚嚜鍔ㄥ湴閫氳繃鍖呬紶杈撳嚭鍘匯傚綋鏁版嵁浼犺緭瀹屾垚鏃訛紝鏈濂藉彇娑圱CP_CORK 閫夐」璁劇疆緇欒繛鎺?#8220;鎷斿幓濉炲瓙”浠ヤ究浠諱竴閮ㄥ垎鐨勫撫閮借兘鍙戦佸嚭鍘匯傝繖鍚?#8220;濉炰綇”緗戠粶榪炴帴鍚岀瓑閲嶈銆?
鎬昏岃█涔嬶紝濡傛灉浣犺偗瀹氳兘涓璧峰彂閫佸涓暟鎹泦鍚堬紙渚嬪HTTP鍝嶅簲鐨勫ご鍜屾鏂囷級(jí)錛岄偅涔堟垜浠緩璁綘璁劇疆TCP_CORK閫夐」錛岃繖鏍峰湪榪欎簺鏁版嵁涔嬮棿涓嶅瓨鍦ㄥ歡榪熴傝兘鏋佸ぇ鍦版湁鐩婁簬WWW銆丗TP浠ュ強(qiáng)鏂囦歡鏈嶅姟鍣ㄧ殑鎬ц兘錛屽悓鏃朵篃綆鍖栦簡(jiǎn)浣犵殑宸ヤ綔銆傜ず渚嬩唬鐮佸涓嬶細(xì)
intfd, on = 1;
…
/* 姝ゅ鏄垱寤哄鎺ュ瓧絳夋搷浣滐紝鍑轟簬綃囧箙鐨勮冭檻鐪佺暐*/
…
setsockopt (fd, SOL_TCP, TCP_CORK, &on, sizeof (on)); /* cork */
write (fd, …);
fprintf (fd, …);
sendfile (fd, …);
write (fd, …);
sendfile (fd, …);
…
on = 0;
setsockopt (fd, SOL_TCP, TCP_CORK, &on, sizeof (on)); /* 鎷斿幓濉炲瓙 */
涓嶅垢鐨勬槸錛岃澶氬父鐢ㄧ殑紼嬪簭騫舵病鏈夎冭檻鍒頒互涓婇棶棰樸備緥濡傦紝Eric Allman緙栧啓鐨剆endmail灝辨病鏈夊鍏跺鎺ュ瓧璁劇疆浠諱綍閫夐」銆?
Apache HTTPD鏄洜鐗圭綉涓婃渶嫻佽鐨刉eb鏈嶅姟鍣紝瀹冪殑鎵鏈夊鎺ュ瓧灝遍兘璁劇疆浜?jiǎn)TCP_NODELAY閫夐」錛岃屼笖鍏舵ц兘涔熸繁鍙楀ぇ澶氭暟鐢ㄦ埛鐨勬弧鎰忋傝繖鏄負(fù)浠涔堝憿錛熺瓟妗堝氨鍦ㄤ簬瀹炵幇鐨勫樊鍒箣涓娿傜敱BSD琛嶇敓鐨凾CP/IP鍗忚鏍堬紙鍊煎緱娉ㄦ剰鐨勬槸FreeBSD錛夊湪榪欑鐘跺喌涓嬬殑鎿嶄綔灝變笉鍚屻傚綋鍦═CP_NODELAY 妯″紡涓嬫彁浜ゅぇ閲忓皬鏁版嵁鍧椾紶杈撴椂錛屽ぇ閲忎俊鎭皢鎸夌収涓嬈rite()鍑芥暟璋冪敤鍙戦佷竴鍧楁暟鎹殑鏂瑰紡鍙戦佸嚭鍘匯傜劧鑰岋紝鍥犱負(fù)璐熻矗璇鋒眰浜や粯紜鐨勮鏁板櫒鏄潰鍚戝瓧鑺傝岄潪闈㈠悜鍖咃紙鍦↙inux涓婏級(jí)鐨勶紝鎵浠ュ紩鍏ュ歡榪熺殑姒傜巼灝遍檷浣庝簡(jiǎn)寰堝銆傜粨鏋滀粎浠呭拰鍏ㄩ儴鏁版嵁鐨勫ぇ灝忔湁鍏崇郴銆傝?#160;Linux 鍦ㄧ涓鍖呭埌杈句箣鍚庡氨瑕佹眰紜錛孎reeBSD鍒欏湪榪涜濡傛鎿嶄綔涔嬪墠浼?xì)绛夊緟濂藉嚑鐧句釜鍖呫?
鍦↙inux緋葷粺涓婏紝TCP_NODELAY鐨勬晥鏋滃悓涔?fàn)鎯簬BSD TCP/IP鍗忚鏍堢殑寮鍙戣呮墍鏈熸湜鐨勬晥鏋滄湁寰堝ぇ涓嶅悓錛岃屼笖鍦↙inux涓婄殑Apache鎬ц兘琛ㄧ幇涔熶細(xì)鏇村樊浜涖傚叾浠栧湪Linux涓婇綣侀噰鐢═CP_NODELAY鐨勫簲鐢ㄧ▼搴忎篃鏈夊悓鏍風(fēng)殑闂銆?
TCP_DEFER_ACCEPT
鎴戜滑棣栧厛鑰冭檻鐨勭1涓夐」鏄疶CP_DEFER_ACCEPT錛堣繖鏄疞inux緋葷粺涓婄殑鍙硶錛屽叾浠栦竴浜涙搷浣滅郴緇熶笂涔熸湁鍚屾牱鐨勯夐」浣嗕嬌鐢ㄤ笉鍚岀殑鍚嶅瓧錛夈備負(fù)浜?jiǎn)鐞嗚ВTCP_DEFER_ACCEPT閫夐」鐨勫叿浣撴濇兂錛屾垜浠湁蹇呰澶ц嚧闃愯堪涓涓嬪吀鍨嬬殑HTTP瀹㈡埛/鏈嶅姟鍣ㄤ氦浜掕繃紼嬨傝鍥炴兂涓婽CP鏄浣曚笌浼犺緭鏁版嵁鐨勭洰鏍囧緩绔嬭繛鎺ョ殑銆傚湪緗戠粶涓婏紝鍦ㄥ垎紱葷殑鍗曞厓涔嬮棿浼犺緭鐨勪俊鎭О涓篒P鍖咃紙鎴朓P 鏁版嵁鎶ワ級(jí)銆備竴涓寘鎬繪湁涓涓惡甯︽湇鍔′俊鎭殑鍖呭ご錛屽寘澶寸敤浜庡唴閮ㄥ崗璁殑澶勭悊錛屽茍涓斿畠涔熷彲浠ユ惡甯︽暟鎹礋杞姐傛湇鍔′俊鎭殑鍏稿瀷渚嬪瓙灝辨槸涓濂楁墍璋撶殑鏍囧織錛屽畠鎶婂寘鏍囪浠h〃TCP/IP鍗忚鏍堝唴鐨勭壒孌婂惈涔夛紝渚嬪鏀跺埌鍖呯殑鎴愬姛紜絳夌瓑銆傞氬父錛屽湪緇忚繃“鏍囪”鐨勫寘閲屾惡甯﹁礋杞芥槸瀹屽叏鍙兘鐨勶紝浣嗘湁鏃訛紝鍐呴儴閫昏緫榪嬌TCP/IP鍗忚鏍堝彂鍑哄彧鏈夊寘澶寸殑IP鍖呫傝繖浜涘寘緇忓父浼?xì)寮曞彂璁ㄥ帉鐨劸|戠粶寤惰繜鑰屼笖榪樺鍔犱簡(jiǎn)緋葷粺鐨勮礋杞斤紝緇撴灉瀵艱嚧緗戠粶鎬ц兘鍦ㄦ暣浣撲笂闄嶄綆銆?
鐜板湪鏈嶅姟鍣ㄥ垱寤轟簡(jiǎn)涓涓鎺ュ瓧鍚屾椂絳夊緟榪炴帴銆俆CP/IP寮忕殑榪炴帴榪囩▼灝辨槸鎵璋?#8220;3嬈℃彙鎵?#8221;銆傞鍏堬紝瀹㈡埛紼嬪簭鍙戦佷竴涓緗甋YN鏍囧織鑰屼笖涓嶅甫鏁版嵁璐熻澆鐨凾CP鍖咃紙涓涓猄YN鍖咃級(jí)銆傛湇鍔″櫒鍒欎互鍙戝嚭甯YN/ACK鏍囧織鐨勬暟鎹寘錛堜竴涓猄YN/ACK鍖咃級(jí)浣滀負(fù)鍒氭墠鏀跺埌鍖呯殑紜鍝嶅簲銆傚鎴烽殢鍚庡彂閫佷竴涓狝CK鍖呯‘璁ゆ敹鍒頒簡(jiǎn)絎?涓寘浠庤岀粨鏉熻繛鎺ヨ繃紼嬨傚湪鏀跺埌瀹㈡埛鍙戞潵鐨勮繖涓猄YN/ACK鍖呬箣鍚庯紝鏈嶅姟鍣ㄤ細(xì)鍞ら啋涓涓帴鏀惰繘紼嬬瓑寰呮暟鎹埌杈俱傚綋3嬈℃彙鎵嬪畬鎴愬悗錛屽鎴風(fēng)▼搴忓嵆寮濮嬫妸“鏈夌敤鐨?#8221;鐨勬暟鎹彂閫佺粰鏈嶅姟鍣ㄣ傞氬父錛屼竴涓狧TTP璇鋒眰鐨勯噺鏄緢灝忕殑鑰屼笖瀹屽叏鍙互瑁呭埌涓涓寘閲屻備絾鏄紝鍦ㄤ互涓婄殑鎯呭喌涓嬶紝鑷沖皯鏈?涓寘灝嗙敤鏉ヨ繘琛屽弻鍚戜紶杈擄紝榪欐牱灝卞鍔犱簡(jiǎn)鍙鐨勫歡榪熸椂闂淬傛澶栵紝浣犺繕寰楁敞鎰忓埌錛屽湪“鏈夌敤鐨?#8221;鏁版嵁琚彂閫佷箣鍓嶏紝鎺ユ敹鏂瑰凡緇忓紑濮嬪湪絳夊緟淇℃伅浜?jiǎn)銆?
涓轟簡(jiǎn)鍑忚交榪欎簺闂鎵甯︽潵鐨勫獎(jiǎng)鍝嶏紝Linux錛堜互鍙?qiáng)鍏朵粬鐨勪竴浜涙搷浣滅郴緇燂級(jí)鍦ㄥ叾TCP瀹炵幇涓寘鎷簡(jiǎn)TCP_DEFER_ACCEPT閫夐」銆傚畠浠緗湪渚﹀惉濂楁帴瀛楃殑鏈嶅姟鍣ㄦ柟錛岃閫夐」鍛戒護(hù)鍐呮牳涓嶇瓑寰呮渶鍚庣殑ACK鍖呰屼笖鍦ㄧ1涓湡姝f湁鏁版嵁鐨勫寘鍒拌揪鎵嶅垵濮嬪寲渚﹀惉榪涚▼銆傚湪鍙戦丼YN/ACK鍖呬箣鍚庯紝鏈嶅姟鍣ㄥ氨浼?xì)绛夊緟瀹㈡堬L(fēng)▼搴忓彂閫佸惈鏁版嵁鐨処P鍖呫傜幇鍦紝鍙渶瑕佸湪緗戠粶涓婁紶閫?涓寘浜?jiǎn)锛岃屼笖榪樻樉钁楅檷浣庝簡(jiǎn)榪炴帴寤虹珛鐨勫歡榪燂紝瀵笻TTP閫氫俊鑰岃█灝ゅ叾濡傛銆?
榪欎竴閫夐」鍦ㄥソ浜涙搷浣滅郴緇熶笂閮芥湁鐩稿簲鐨勫絳夌墿銆備緥濡傦紝鍦‵reeBSD涓婏紝鍚屾牱鐨勮涓哄彲浠ョ敤浠ヤ笅浠g爜瀹炵幇錛?
/* 涓烘槑鏅拌搗瑙侊紝姝ゅ鐣ュ幓鏃犲叧浠g爜 */
struct accept_filter_arg af = { "dataready", "" };
setsockopt(s, SOL_SOCKET, SO_ACCEPTFILTER, &af, sizeof(af));
榪欎釜鐗瑰緛鍦‵reeBSD涓婂彨鍋?#8220;鎺ュ彈榪囨護(hù)鍣?#8221;錛岃屼笖鍏鋒湁澶氱鐢ㄦ硶銆備笉榪囷紝鍦ㄥ嚑涔庢墍鏈夌殑鎯呭喌涓嬪叾鏁堟灉涓嶵CP_DEFER_ACCEPT鏄竴鏍風(fēng)殑錛氭湇鍔″櫒涓嶇瓑寰呮渶鍚庣殑ACK鍖呰屼粎浠呯瓑寰呮惡甯︽暟鎹礋杞界殑鍖呫傝浜?jiǎn)瑙h閫夐」鍙?qiáng)鍏跺瘹w珮鎬ц兘Web鏈嶅姟鍣ㄧ殑閲嶈鎰忎箟鐨勬洿澶氫俊鎭鍙傝傾pache鏂囨。涓婄殑鏈夊叧鍐呭銆?
灝盚TTP瀹㈡埛/鏈嶅姟鍣ㄤ氦浜掕岃█錛屾湁鍙兘闇瑕佹敼鍙樺鎴風(fēng)▼搴忕殑琛屼負(fù)銆傚鎴風(fēng)▼搴忎負(fù)浠涔堣鍙戦佽繖縐?#8220;鏃犵敤鐨?#8221;ACK鍖呭憿錛熻繖鏄洜涓猴紝TCP鍗忚鏍堟棤娉曠煡閬揂CK鍖呯殑鐘舵併傚鏋滈噰鐢‵TP鑰岄潪HTTP錛岄偅涔堝鎴風(fēng)▼搴忕洿鍒版帴鏀朵簡(jiǎn)FTP鏈嶅姟鍣ㄦ彁紺虹殑鏁版嵁鍖呬箣鍚庢墠鍙戦佹暟鎹傚湪榪欑鎯呭喌涓嬶紝寤惰繜鐨凙CK灝嗗鑷村鎴?鏈嶅姟鍣ㄤ氦浜掑嚭鐜板歡榪熴備負(fù)浜?jiǎn)纭畾ACK鏄惁蹇呰錛屽鎴風(fēng)▼搴忓繀欏葷煡閬撳簲鐢ㄧ▼搴忓崗璁強(qiáng)鍏跺綋鍓嶇姸鎬併傝繖鏍鳳紝淇敼瀹㈡埛琛屼負(fù)灝辨垚涓哄繀瑕佷簡(jiǎn)銆?
瀵筁inux瀹㈡埛紼嬪簭鏉ヨ錛屾垜浠繕鍙互閲囩敤鍙︿竴涓夐」錛屽畠涔熻鍙仛TCP_DEFER_ACCEPT銆傛垜浠煡閬擄紝濂楁帴瀛楀垎鎴愪袱縐嶇被鍨嬶紝渚﹀惉濂楁帴瀛楀拰榪炴帴濂楁帴瀛楋紝鎵浠ュ畠浠篃鍚勮嚜鍏鋒湁鐩稿簲鐨凾CP閫夐」闆嗗悎銆傚洜姝わ紝緇忓父鍚屾椂閲囩敤鐨勮繖涓ょ被閫夐」鍗村叿鏈夊悓鏍風(fēng)殑鍚嶅瓧涔熸槸瀹屽叏鍙兘鐨勩傚湪榪炴帴濂楁帴瀛椾笂璁劇疆璇ラ夐」浠ュ悗錛屽鎴峰湪鏀跺埌涓涓猄YN/ACK鍖呬箣鍚庡氨涓嶅啀鍙戦丄CK鍖咃紝鑰屾槸絳夊緟鐢ㄦ埛紼嬪簭鐨勪笅涓涓彂閫佹暟鎹姹傦紱鍥犳錛屾湇鍔″櫒鍙戦佺殑鍖呬篃灝辯浉搴斿噺灝戜簡(jiǎn)銆?
TCP_QUICKACK
闃繪鍥犲彂閫佹棤鐢ㄥ寘鑰屽紩鍙戝歡榪熺殑鍙︿竴涓柟娉曟槸浣跨敤TCP_QUICKACK閫夐」銆傝繖涓閫夐」涓?#160;TCP_DEFER_ACCEPT涓嶅悓錛屽畠涓嶄絾鑳界敤浣滅鐞嗚繛鎺ュ緩绔嬭繃紼嬭屼笖鍦ㄦ甯告暟鎹紶杈撹繃紼嬫湡闂翠篃鍙互浣跨敤銆傚彟澶栵紝瀹冭兘鍦ㄥ鎴?鏈嶅姟鍣ㄨ繛鎺ョ殑浠諱綍涓鏂硅緗傚鏋滅煡閬撴暟鎹笉涔呭嵆灝嗗彂閫侊紝閭d箞鎺ㄨ繜ACK鍖呯殑鍙戦佸氨浼?xì)娲句笂鐢ㄥ満锛岃屼笖鏈濂藉湪閭d釜鎼哄甫鏁版嵁鐨勬暟鎹寘涓婅緗瓵CK 鏍囧織浠ヤ究鎶婄綉緇滆礋杞藉噺鍒版渶灝忋傚綋鍙戦佹柟鑲畾鏁版嵁灝嗚绔嬪嵆鍙戦侊紙澶氫釜鍖咃級(jí)鏃訛紝TCP_QUICKACK閫夐」鍙互璁劇疆涓?銆傚澶勪簬“榪炴帴”鐘舵佷笅鐨勫鎺ュ瓧璇ラ夐」鐨勭己鐪佸兼槸1錛岄嬈′嬌鐢ㄤ互鍚庡唴鏍稿皢鎶婅閫夐」绔嬪嵆澶嶄綅涓?錛堣繖鏄釜涓嬈℃х殑閫夐」錛夈?
鍦ㄦ煇浜涙儏褰笅錛屽彂鍑篈CK鍖呭垯闈炲父鏈夌敤銆侫CK鍖呭皢紜鏁版嵁鍧楃殑鎺ユ敹錛岃屼笖錛屽綋涓嬩竴鍧楄澶勭悊鏃朵笉鑷充簬寮曞叆寤惰繜銆傝繖縐嶆暟鎹紶杈撴ā寮忓浜や簰榪囩▼鏄浉褰撳吀鍨嬬殑錛屽洜涓烘綾繪儏鍐典笅鐢ㄦ埛鐨勮緭鍏ユ椂鍒繪棤娉曢嫻嬨傚湪Linux緋葷粺涓婅繖灝辨槸緙虹渷鐨勫鎺ュ瓧琛屼負(fù)銆?
鍦ㄤ笂榪版儏鍐典笅錛屽鎴風(fēng)▼搴忓湪鍚戞湇鍔″櫒鍙戦丠TTP璇鋒眰錛岃岄鍏堝氨鐭ラ亾璇鋒眰鍖呭緢鐭墍浠ュ湪榪炴帴寤虹珛涔嬪悗灝卞簲璇ョ珛鍗沖彂閫侊紝榪欏彲璋揌TTP鐨勫吀鍨嬪伐浣滄柟寮忋傛棦鐒舵病鏈夊繀瑕佸彂閫佷竴涓函綺圭殑ACK鍖咃紝鎵浠ヨ緗甌CP_QUICKACK涓?浠ユ彁楂樻ц兘鏄畬鍏ㄥ彲鑳界殑銆傚湪鏈嶅姟鍣ㄦ柟錛岃繖涓ょ閫夐」閮藉彧鑳藉湪渚﹀惉濂楁帴瀛椾笂璁劇疆涓嬈°傛墍鏈夌殑濂楁帴瀛楋紝涔熷氨鏄鎺ュ彈鍛煎彨闂存帴鍒涘緩鐨勫鎺ュ瓧鍒欎細(xì)緇ф壙鍘熸湁濂楁帴瀛楃殑鎵鏈夐夐」銆?
閫氳繃TCP_CORK銆乀CP_DEFER_ACCEPT鍜孴CP_QUICKACK閫夐」鐨勭粍鍚堬紝鍙備笌姣忎竴HTTP浜や簰鐨勬暟鎹寘鏁伴噺灝嗚闄嶄綆鍒版渶灝忕殑鍙帴鍙楁按騫籌紙鏍規(guī)嵁TCP鍗忚鐨勮姹傚拰瀹夊叏鏂歸潰鐨勮冭檻錛夈傜粨鏋滀笉浠呮槸鑾峰緱鏇村揩鐨勬暟鎹紶杈撳拰璇鋒眰澶勭悊閫熷害鑰屼笖榪樹嬌瀹㈡埛/鏈嶅姟鍣ㄥ弻鍚戝歡榪熷疄鐜頒簡(jiǎn)鏈灝忓寲銆?

.




