锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鍋氫笅絎旇錛屼互渚涗笉鏃朵箣闇:)
絎?/span>4绔?/span>
socket(int family, int type, int protocol);
闈炶礋鎻忚堪瀛?/span>-鎴愬姛錛?/span>-1-鍑洪敊
鍗忚鏃?/span> 濂楁帴鍙g被鍨?/span> 鍗忚綾誨瀷甯擱噺鍊?/span>
AF_INET IPv4鍗忚 SOCK_STREAM 瀛楄妭嫻?/span> IPPROTO_TCP TCP浼犺緭鍗忚
AF_INET6 IPv6鍗忚 SOCK_DGRAM 鏁版嵁鎶?/span> IPPROTO_UDP UDP浼犺緭鍗忚
AF_LOCAL UNIX鍩熷崗璁?/span> SOCK_SEQPACKET鏈夊簭鍒嗙粍 IPPROTO_SCTP SCTP浼犺緭鍗忚
AF_ROUTE 璺敱濂楁帴鍙?/span> SOCK_RAW 鍘熷濂楁帴鍙?/span>
AF_KEY 瀵嗛挜濂楁帴鍙?/span>
protocol鍙互璁句負(fù)0錛屼互閫夋嫨鎵緇欏畾鐨?/span>family鍜?/span>type緇勫悎鐨勭郴緇熺己鐪佸?/span>
connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);
瑕佽繛鎺ョ殑濂楁帴鍙f弿榪板瓧 鎸囧悜鎻忚堪榪炴帴鍦板潃鐨勫鎺ュ彛鍦板潃鐨勭粨鏋勬寚閽?/span> 鎸囧悜濂楁帴鍙e湴鍧鐨勭粨鏋勫ぇ灝?/span>
0-鎴愬姛錛?/span>-1-澶辮觸
ETIMEDOUT閿欒錛屽鎴風(fēng)鏈敹鍒?/span>SYN鍒嗚妭鐨勫搷搴?/span>
鍦?/span>4.4BSD鍐呮牳涓?/span>SYN鍒嗚妭浼?xì)鍦ㄩ娆″彂鍑哄悗鐨?/span>6縐掞紝24縐掑悗鍐嶅彂鍑?/span>SYN鍒嗚妭錛屽鏋?/span>75縐掑悗浠嶆棤鍝嶅簲錛岃繑鍥為敊璇?/span>(TCPv2 p828)
ECONNERFUSED閿欒錛屽鎴風(fēng)鏀跺埌RST鍒嗚妭鏃跺氨榪斿洖閿欒
鍏朵腑浜х敓RST鐨勪笁涓潯浠舵槸錛?/span>
1.鐩殑鍦頒負(fù)鏌愮鍙g殑SYN鍒拌揪錛岀劧鑰岃绔彛涓婃病鏈夋鍦ㄧ洃鍚殑鏈嶅姟鍣?/span>
2.TCP鎯沖彇娑堜竴涓凡鏈夎繛鎺?/span>
3.TCP鎺ュ彈鍒頒竴涓牴鏈笉瀛樺湪鐨勮繛鎺ヤ笂鐨勫垎鑺?/span>(TCPv1 246-250)
EHOSTUNREACH鎴?/span>ENETUNREACH閿欒
鍦ㄥ彂鍑?/span>SYN鍒嗚妭鐨勪腑闂存煇涓礬鐢卞櫒寮曞彂浜?jiǎn)鐩殑鍦颁笉鍙緞?/span>ICMP閿欒錛屽鎴蜂富鏈轟繚瀛樿娑堟伅錛屼絾浠嶇劧緇х畫(huà)鍙戦?/span>SYN錛岀洿鍒?/span>75縐掑悗錛屽鏋滀粛鏈湁鍥炲簲錛屽垯鎶婇敊璇秷鎭繑鍥炵粰榪涚▼銆?/span>
浠ヤ笅鎯呭喌涔熶細(xì)浜х敓姝ょ被閿欒
1.鏈湴緋葷粺鐨勮漿鍙戣〃錛屾牴鏈病鏈夊埌杈捐繙鍦扮郴緇熺殑璺緞
2.connect璋冪敤鏍規(guī)湰涓嶇瓑寰呭氨榪斿洖(闈為樆濉?/span>?)
娉?/span>:connect澶辮觸鍒欒濂楁帴鍙d笉鍐嶅彲鐢紝蹇呴』鍏抽棴銆?/span>
bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);
0-鎴愬姛,-1澶辮觸
瑕佺粦瀹氱殑濂楁帴鍙f弿榪板瓧 鎸囧悜鎻忚堪瑕佺粦瀹氱殑濂楁帴鍙e湴鍧鐨勭粨鏋勬寚閽?/span> 鎸囧悜濂楁帴鍙e湴鍧鐨勭粨鏋勫ぇ灝?/span>
濡傛灉涓涓?/span>TCP瀹㈡埛绔垨鏈嶅姟鍣ㄦ湭鏇捐皟鐢?/span>bind鎹嗙粦涓涓鍙o紝褰撹皟鐢?/span>connect鎴?/span>listen鏃訛紝鍐呮牳浼?xì)湄?fù)鐩稿簲鐨勫鎺ュ彛閫夋嫨涓涓復(fù)鏃剁鍙?/span>
榪涚▼鍙妸鐗瑰畾IP鍦板潃鎹嗙粦鍒板畠鐨勫鎺ュ彛涓婏紝榪欎釜鐗瑰畾IP蹇呴』鏄富鏈虹殑緗戠粶鎺ュ彛涔嬩竴銆傚浜?/span>TCP瀹㈡埛錛岃繖灝遍檺瀹氫簡(jiǎn)濂楁帴鍙e彧鎺ュ彈鐩殑鍦頒負(fù)榪欎釜鐗瑰畾IP鐨勫鎴瘋繛鎺ャ?/span>
TCP瀹㈡埛閫氳繃涓嶆妸IP鎹嗙粦鍒板畠鐨勫鎺ュ彛涓婏紝鍐呮牳浼?xì)鏍规嵁鎵鐢ㄥ鍑虹綉緇滄帴鍙f潵閫夋嫨婧?/span>IP鍦板潃錛岃屾墍鐢ㄥ鍑虹殑鎺ュ彛鍒欏彇鍐充簬鍒拌揪鏈嶅姟鍣ㄦ墍闇鐨勮礬寰勩?/span>(TCPv2 p737)
濡傛灉TCP鏈嶅姟鍣ㄦ病鏈夋妸IP鍦板潃鎹嗙粦鍒板畠鐨勫鎺ュ彛涓婏紝鍐呮牳灝辨妸瀹㈡埛鍙戦佺殑SYN鐨勫IP鍦板潃浣滀負(fù)鏈嶅姟鍣ㄧ殑婧愬湴鍧銆?/span>(TCPv2 p943)
EADDRINUSE閿欒 鍦板潃宸蹭嬌鐢?/span>
listen( int sockfd , int backlog);
0-鎴愬姛錛?/span>-1澶辮觸
瑕佽漿鎹㈡垚琚姩鐨勫鎺ュ彛 鎺掗槦鐨勬渶澶у凡榪炴帴涓暟
1.鏈畬鎴愯繛鎺ラ槦鍒?/span>
澶勪簬SYN_RCVD鐘舵佺殑濂楁帴鍙i槦鍒?/span>
2.宸插畬鎴愯繛鎺ラ槦鍒?/span>
澶勪簬ESTABLISHED鐘舵佺殑濂楁帴鍙i槦鍒?/span>
鍦ㄩ槦鍒楁弧鏃訛紝鏈嶅姟鍣ㄥ鏋滄敹鍒?/span>SYN鍒嗚妭錛屼細(xì)蹇界暐鎺夛紝鍥犱負(fù)闃熷垪婊℃槸鏆傛椂鎬х殑錛屽拷鐣ユ帀鍙互浠ユ湡寰呭鎴風(fēng)鐨勫啀嬈¤繛鎺ャ傝屽鏋滆繑鍥?/span>RST鍒嗚妭錛屼細(xì)鏃跺鎴風(fēng)鏀懼純榪炴帴銆?/span>
鍦ㄤ笁嬈℃彙鎵嬪畬鎴愪箣鍚庯紝浣嗗湪鏈嶅姟鍣ㄨ皟鐢?/span>accept涔嬪墠鍒拌揪鐨勬暟鎹紝搴旀湁鏈嶅姟鍣?/span>TCP鎺掗槦錛屾渶澶ф暟鎹噺涓虹浉搴旂殑宸茶繛鎺ュ鎺ュ彛鐨勬帴鍙楃紦鍐插尯澶у皬銆?br>
Int accept( int sockfd, struct sockaddr* cliaddr, socklen_t* addrlen);
闈炶礋鎻忚堪瀛?/span>-鎴愬姛,-1-澶辮觸
琚姩鐨勭洃鍚鎺ュ彛 瀵圭鐨勫鎺ュ彛鍦板潃鐨勭粨鏋?/span> 瀵圭鐨勫鎺ュ彛鍦板潃鐨勭粨鏋勫ぇ灝?/span>
Int close(int sockfd);
0- 鎴愬姛,-1-澶辮觸
瑕佸叧闂殑濂楁帴鍙?/span>
緙虹渷琛屼負(fù)鏄慨鏀瑰鎺ュ彛鏍囪涓哄凡鍏抽棴錛屽嚱鏁頒細(xì)绔嬪嵆榪斿洖錛屾鏃惰濂楁帴鍙f弿榪板瓧宸蹭笉鑳藉啀鐢辮繘紼嬩嬌鐢ㄣ傝?/span>TCP灝嗗皾璇曞彂閫佸凡鎺掗槦絳夊緟鍙戦佸埌瀵圭鐨勪換浣曟暟鎹紝鍙戦佸畬姣曞悗寮濮嬫甯哥殑TCP榪炴帴緇堟搴忓垪銆?/span>
SO_LINGER濂楁帴鍙i夐」鍙互鏀瑰彉姝ょ己鐪佽涓恒?/span>