{"id":808,"date":"2012-09-13T09:32:13","date_gmt":"2012-09-13T01:32:13","guid":{"rendered":"http:\/\/www.kumouse.com\/?p=808"},"modified":"2012-09-13T09:32:13","modified_gmt":"2012-09-13T01:32:13","slug":"setsockopt","status":"publish","type":"post","link":"https:\/\/www.kumouse.com\/?p=808","title":{"rendered":"setsockopt"},"content":{"rendered":"<p>int setsockopt(<br \/>\nSOCKET s,<br \/>\nint level,<br \/>\nint optname,<br \/>\nconst char* optval,<br \/>\nint optlen<br \/>\n);<\/p>\n<p>s(\u5957\u63a5\u5b57): \u6307\u5411\u4e00\u4e2a\u6253\u5f00\u7684\u5957\u63a5\u53e3\u63cf\u8ff0\u5b57<br \/>\nlevel:(\u7ea7\u522b)\uff1a \u6307\u5b9a\u9009\u9879\u4ee3\u7801\u7684\u7c7b\u578b\u3002<br \/>\nSOL_SOCKET: \u57fa\u672c\u5957\u63a5\u53e3<br \/>\nIPPROTO_IP: IPv4\u5957\u63a5\u53e3<br \/>\nIPPROTO_IPV6: IPv6\u5957\u63a5\u53e3<br \/>\nIPPROTO_TCP: TCP\u5957\u63a5\u53e3<br \/>\noptname(\u9009\u9879\u540d)\uff1a \u9009\u9879\u540d\u79f0<br \/>\noptval(\u9009\u9879\u503c): \u662f\u4e00\u4e2a\u6307\u5411\u53d8\u91cf\u7684\u6307\u9488 \u7c7b\u578b\uff1a\u6574\u5f62\uff0c\u5957\u63a5\u53e3\u7ed3\u6784\uff0c \u5176\u4ed6\u7ed3\u6784\u7c7b\u578b:linger{}, timeval{ }<br \/>\noptlen(\u9009\u9879\u957f\u5ea6) \uff1aoptval \u7684\u5927\u5c0f<\/p>\n<p>\u8fd4\u56de\u503c\uff1a\u6807\u5fd7\u6253\u5f00\u6216\u5173\u95ed\u67d0\u4e2a\u7279\u5f81\u7684\u4e8c\u8fdb\u5236\u9009\u9879<br \/>\n[\/code:1:59df4ce128]<\/p>\n<p>========================================================================<br \/>\nSOL_SOCKET<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nSO_BROADCAST \u5141\u8bb8\u53d1\u9001\u5e7f\u64ad\u6570\u636e int<br \/>\n\u9002\u7528\u65bc UDP socket\u3002\u5176\u610f\u4e49\u662f\u5141\u8bb8 UDP socket \u300c\u5e7f\u64ad\u300d\uff08broadcast\uff09\u8baf\u606f\u5230\u7f51\u8def\u4e0a\u3002<\/p>\n<p>SO_DEBUG \u5141\u8bb8\u8c03\u8bd5 int<\/p>\n<p>SO_DONTROUTE \u4e0d\u67e5\u627e\u8def\u7531 int<\/p>\n<p>SO_ERROR \u83b7\u5f97\u5957\u63a5\u5b57\u9519\u8bef int<\/p>\n<p>SO_KEEPALIVE \u4fdd\u6301\u8fde\u63a5 int<br \/>\n\u68c0 \u6d4b\u5bf9\u65b9\u4e3b\u673a\u662f\u5426\u5d29\u6e83\uff0c\u907f\u514d\uff08\u670d\u52a1\u5668\uff09\u6c38\u8fdc\u963b\u585e\u4e8eTCP\u8fde\u63a5\u7684\u8f93\u5165\u3002 \u8bbe\u7f6e\u8be5\u9009\u9879\u540e\uff0c\u5982\u679c2\u5c0f\u65f6\u5185\u5728\u6b64\u5957\u63a5\u53e3\u7684\u4efb\u4e00\u65b9\u5411\u90fd\u6ca1\u6709\u6570\u636e\u4ea4\u6362\uff0cTCP\u5c31\u81ea\u52a8\u7ed9\u5bf9\u65b9 \u53d1\u4e00\u4e2a\u4fdd\u6301\u5b58\u6d3b\u63a2\u6d4b\u5206\u8282(keepalive probe)\u3002\u8fd9\u662f\u4e00\u4e2a\u5bf9\u65b9\u5fc5\u987b\u54cd\u5e94\u7684TCP\u5206\u8282.\u5b83\u4f1a\u5bfc\u81f4\u4ee5\u4e0b\u4e09\u79cd\u60c5\u51b5\uff1a \u5bf9\u65b9\u63a5\u6536\u4e00\u5207\u6b63\u5e38\uff1a\u4ee5\u671f\u671b\u7684 ACK\u54cd\u5e94\u30022\u5c0f\u65f6\u540e\uff0cTCP\u5c06\u53d1\u51fa\u53e6\u4e00\u4e2a\u63a2\u6d4b\u5206\u8282\u3002 \u5bf9\u65b9\u5df2\u5d29\u6e83\u4e14\u5df2\u91cd\u65b0\u542f\u52a8\uff1a\u4ee5RST\u54cd\u5e94\u3002\u5957\u63a5\u53e3\u7684\u5f85\u5904\u7406\u9519\u8bef\u88ab\u7f6e\u4e3aECONNRESET\uff0c\u5957\u63a5 \u53e3\u672c\u8eab\u5219\u88ab\u5173\u95ed\u3002 \u5bf9\u65b9\u65e0\u4efb\u4f55\u54cd\u5e94\uff1a\u6e90\u81eaberkeley\u7684TCP\u53d1\u9001\u53e6\u59168\u4e2a\u63a2\u6d4b\u5206\u8282\uff0c\u76f8\u969475\u79d2\u4e00\u4e2a\uff0c\u8bd5\u56fe\u5f97\u5230 \u4e00\u4e2a\u54cd\u5e94\u3002\u5728\u53d1\u51fa\u7b2c\u4e00\u4e2a\u63a2\u6d4b\u5206\u828211\u5206\u949f15\u79d2\u540e\u82e5\u4ecd\u65e0\u54cd\u5e94\u5c31\u653e\u5f03\u3002\u5957\u63a5\u53e3\u7684\u5f85\u5904\u7406\u9519 \u8bef\u88ab\u7f6e\u4e3aETIMEOUT\uff0c\u5957\u63a5\u53e3\u672c\u8eab\u5219\u88ab\u5173\u95ed\u3002\u5982ICMP\u9519\u8bef\u662f\u201chost unreachable (\u4e3b\u673a\u4e0d \u53ef\u8fbe)\u201d\uff0c\u8bf4\u660e\u5bf9\u65b9\u4e3b\u673a\u5e76\u6ca1\u6709\u5d29\u6e83\uff0c\u4f46\u662f\u4e0d\u53ef\u8fbe\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u5f85\u5904\u7406\u9519\u8bef\u88ab\u7f6e\u4e3a EHOSTUNREACH\u3002<\/p>\n<p>SO_DONTLINGER \u82e5\u4e3a\u771f\uff0c\u5219SO_LINGER\u9009\u9879\u88ab\u7981\u6b62\u3002<br \/>\nSO_LINGER \u5ef6\u8fdf\u5173\u95ed\u8fde\u63a5 struct linger<br \/>\n\u4e0a\u9762\u8fd9\u4e24\u4e2a\u9009\u9879\u5f71\u54cdclose\u884c\u4e3a<br \/>\n\u9009\u9879 \u95f4\u9694 \u5173\u95ed\u65b9\u5f0f \u7b49\u5f85\u5173\u95ed\u4e0e\u5426<br \/>\nSO_DONTLINGER \u4e0d\u5173\u5fc3 \u4f18\u96c5 \u5426<br \/>\nSO_LINGER \u96f6 \u5f3a\u5236 \u5426<br \/>\nSO_LINGER \u975e\u96f6 \u4f18\u96c5 \u662f<br \/>\n\u82e5 \u8bbe\u7f6e\u4e86SO_LINGER\uff08\u4ea6\u5373linger\u7ed3\u6784\u4e2d\u7684l_onoff\u57df\u8bbe\u4e3a\u975e\u96f6\uff0c\u53c2\u89c12.4\uff0c4.1.7\u548c4.1.21\u5404\u8282\uff09\uff0c\u5e76\u8bbe\u7f6e\u4e86\u96f6\u8d85\u65f6\u95f4\u9694\uff0c\u5219 closesocket()\u4e0d\u88ab\u963b\u585e\u7acb\u5373\u6267\u884c\uff0c\u4e0d\u8bba\u662f\u5426\u6709\u6392\u961f\u6570\u636e\u672a\u53d1\u9001\u6216\u672a\u88ab\u786e\u8ba4\u3002\u8fd9\u79cd\u5173\u95ed\u65b9\u5f0f\u79f0\u4e3a\u201c\u5f3a\u5236\u201d\u6216\u201c\u5931\u6548\u201d\u5173\u95ed\uff0c\u56e0\u4e3a\u5957\u63a5\u53e3\u7684\u865a\u7535\u8def\u7acb\u5373\u88ab \u590d\u4f4d\uff0c\u4e14\u4e22\u5931\u4e86\u672a\u53d1\u9001\u7684\u6570\u636e\u3002\u5728\u8fdc\u7aef\u7684recv()\u8c03\u7528\u5c06\u4ee5WSAECONNRESET\u51fa\u9519\u3002<br \/>\n\u82e5\u8bbe\u7f6e\u4e86SO_LINGER\u5e76\u786e\u5b9a\u4e86\u975e\u96f6\u7684\u8d85\u65f6\u95f4 \u9694\uff0c\u5219closesocket()\u8c03\u7528\u963b\u585e\u8fdb\u7a0b\uff0c\u76f4\u5230\u6240\u5269\u6570\u636e\u53d1\u9001\u5b8c\u6bd5\u6216\u8d85\u65f6\u3002\u8fd9\u79cd\u5173\u95ed\u79f0\u4e3a\u201c\u4f18\u96c5\u7684\u201d\u5173\u95ed\u3002\u8bf7\u6ce8\u610f\u5982\u679c\u5957\u63a5\u53e3\u7f6e\u4e3a\u975e\u963b\u585e\u4e14 SO_LINGER\u8bbe\u4e3a\u975e\u96f6\u8d85\u65f6\uff0c\u5219closesocket()\u8c03\u7528\u5c06\u4ee5WSAEWOULDBLOCK\u9519\u8bef\u8fd4\u56de\u3002<br \/>\n\u82e5\u5728\u4e00\u4e2a\u6d41\u7c7b\u5957\u63a5\u53e3\u4e0a\u8bbe\u7f6e\u4e86 SO_DONTLINGER\uff08\u4e5f\u5c31\u662f\u8bf4\u5c06linger\u7ed3\u6784\u7684l_onoff\u57df\u8bbe\u4e3a\u96f6\uff1b\u53c2\u89c12.4\uff0c4.1.7\uff0c4.1.21\u8282\uff09\uff0c\u5219 closesocket()\u8c03\u7528\u7acb\u5373\u8fd4\u56de\u3002\u4f46\u662f\uff0c\u5982\u679c\u53ef\u80fd\uff0c\u6392\u961f\u7684\u6570\u636e\u5c06\u5728\u5957\u63a5\u53e3\u5173\u95ed\u524d\u53d1\u9001\u3002\u8bf7\u6ce8\u610f\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0bWINDOWS\u5957\u63a5\u53e3\u5b9e\u73b0\u5c06\u5728\u4e00\u6bb5\u4e0d\u786e \u5b9a\u7684\u65f6\u95f4\u5185\u4fdd\u7559\u5957\u63a5\u53e3\u4ee5\u53ca\u5176\u4ed6\u8d44\u6e90\uff0c\u8fd9\u5bf9\u4e8e\u60f3\u7528\u6240\u4ee5\u5957\u63a5\u53e3\u7684\u5e94\u7528\u7a0b\u5e8f\u6765\u8bf4\u6709\u4e00\u5b9a\u5f71\u54cd\u3002<\/p>\n<p>SO_OOBINLINE \u5e26\u5916\u6570\u636e\u653e\u5165\u6b63\u5e38\u6570\u636e\u6d41,\u5728\u666e\u901a\u6570\u636e\u6d41\u4e2d\u63a5\u6536\u5e26\u5916\u6570\u636e int<\/p>\n<p>SO_RCVBUF \u63a5\u6536\u7f13\u51b2\u533a\u5927\u5c0f int<br \/>\n\u8bbe\u7f6e\u63a5\u6536\u7f13\u51b2\u533a\u7684\u4fdd\u7559\u5927\u5c0f<br \/>\n\u4e0e SO_MAX_MSG_SIZE \u6216TCP\u6ed1\u52a8\u7a97\u53e3\u65e0\u5173\uff0c\u5982\u679c\u4e00\u822c\u53d1\u9001\u7684\u5305\u5f88\u5927\u5f88\u9891\u7e41\uff0c\u90a3\u4e48\u4f7f\u7528\u8fd9\u4e2a\u9009\u9879<\/p>\n<p>SO_SNDBUF \u53d1\u9001\u7f13\u51b2\u533a\u5927\u5c0f int<br \/>\n\u8bbe\u7f6e\u53d1\u9001\u7f13\u51b2\u533a\u7684\u4fdd\u7559\u5927\u5c0f<br \/>\n\u4e0e SO_MAX_MSG_SIZE \u6216TCP\u6ed1\u52a8\u7a97\u53e3\u65e0\u5173\uff0c\u5982\u679c\u4e00\u822c\u53d1\u9001\u7684\u5305\u5f88\u5927\u5f88\u9891\u7e41\uff0c\u90a3\u4e48\u4f7f\u7528\u8fd9\u4e2a\u9009\u9879<br \/>\n\u6bcf \u4e2a\u5957\u63a5\u53e3\u90fd\u6709\u4e00\u4e2a\u53d1\u9001\u7f13\u51b2\u533a\u548c\u4e00\u4e2a\u63a5\u6536\u7f13\u51b2\u533a\u3002 \u63a5\u6536\u7f13\u51b2\u533a\u88abTCP\u548cUDP\u7528\u6765\u5c06\u63a5\u6536\u5230\u7684\u6570\u636e\u4e00\u76f4\u4fdd\u5b58\u5230\u7531\u5e94\u7528\u8fdb\u7a0b\u6765\u8bfb\u3002 TCP\uff1aTCP\u901a\u544a\u53e6\u4e00\u7aef\u7684\u7a97\u53e3\u5927\u5c0f\u3002 TCP\u5957\u63a5\u53e3\u63a5\u6536\u7f13\u51b2\u533a\u4e0d\u53ef\u80fd\u6ea2\u51fa\uff0c\u56e0\u4e3a\u5bf9\u65b9\u4e0d\u5141\u8bb8\u53d1\u51fa\u8d85\u8fc7\u6240\u901a\u544a\u7a97\u53e3\u5927\u5c0f\u7684\u6570\u636e\u3002 \u8fd9\u5c31\u662fTCP\u7684\u6d41\u91cf\u63a7\u5236\uff0c\u5982\u679c\u5bf9\u65b9\u65e0\u89c6\u7a97\u53e3\u5927\u5c0f\u800c\u53d1\u51fa\u4e86\u8d85\u8fc7\u5b99\u53e3\u5927\u5c0f\u7684\u6570\u636e\uff0c\u5219\u63a5 \u6536\u65b9TCP\u5c06\u4e22\u5f03\u5b83\u3002 UDP\uff1a\u5f53\u63a5\u6536\u5230\u7684\u6570\u636e\u62a5\u88c5\u4e0d\u8fdb\u5957\u63a5\u53e3\u63a5\u6536\u7f13\u51b2\u533a\u65f6\uff0c\u6b64\u6570\u636e\u62a5\u5c31\u88ab\u4e22\u5f03\u3002UDP\u662f\u6ca1\u6709 \u6d41\u91cf\u63a7\u5236\u7684\uff1b\u5feb\u7684\u53d1\u9001\u8005\u53ef\u4ee5\u5f88\u5bb9\u6613\u5730\u5c31\u6df9\u6ca1\u6162\u7684\u63a5\u6536\u8005\uff0c\u5bfc\u81f4\u63a5\u6536\u65b9\u7684UDP\u4e22\u5f03\u6570\u636e\u62a5\u3002<\/p>\n<p>SO_RCVLOWAT \u63a5\u6536\u7f13\u51b2\u533a\u4e0b\u9650 int<br \/>\nSO_SNDLOWAT \u53d1\u9001\u7f13\u51b2\u533a\u4e0b\u9650 int<br \/>\n\u6bcf \u4e2a\u5957\u63a5\u53e3\u90fd\u6709\u4e00\u4e2a\u63a5\u6536\u4f4e\u6f6e\u9650\u5ea6\u548c\u4e00\u4e2a\u53d1\u9001\u4f4e\u6f6e\u9650\u5ea6\u3002\u5b83\u4eec\u662f\u51fd\u6570selectt\u4f7f\u7528\u7684\uff0c \u63a5\u6536\u4f4e\u6f6e\u9650\u5ea6\u662f\u8ba9select\u8fd4\u56de\u201c\u53ef\u8bfb\u201d\u800c\u5728\u5957\u63a5\u53e3\u63a5\u6536\u7f13\u51b2\u533a\u4e2d\u5fc5\u987b\u6709\u7684\u6570\u636e\u603b\u91cf\u3002 \u2014\u2014\u5bf9\u4e8e\u4e00\u4e2aTCP\u6216UDP\u5957\u63a5\u53e3\uff0c\u6b64\u503c\u7f3a\u7701\u4e3a1\u3002\u53d1\u9001\u4f4e\u6f6e\u9650\u5ea6\u662f\u8ba9select\u8fd4\u56de\u201c\u53ef\u5199\u201d \u800c\u5728\u5957\u63a5\u53e3\u53d1\u9001\u7f13\u51b2\u533a\u4e2d\u5fc5\u987b\u6709\u7684\u53ef\u7528\u7a7a\u95f4\u3002\u5bf9\u4e8eTCP\u5957\u63a5\u53e3\uff0c\u6b64\u503c\u5e38\u7f3a\u7701\u4e3a2048\u3002 \u5bf9\u4e8eUDP\u4f7f\u7528\u4f4e\u6f6e\u9650\u5ea6\uff0c \u7531\u4e8e\u5176\u53d1\u9001\u7f13\u51b2\u533a\u4e2d\u53ef\u7528\u7a7a\u95f4\u7684\u5b57\u8282\u6570\u662f\u4ece\u4e0d\u53d8\u5316\u7684\uff0c\u53ea\u8981 UDP\u5957\u63a5\u53e3\u53d1\u9001\u7f13\u51b2\u533a\u5927\u5c0f\u5927\u4e8e\u5957\u63a5\u53e3\u7684\u4f4e\u6f6e\u9650\u5ea6\uff0c\u8fd9\u6837\u7684UDP\u5957\u63a5\u53e3\u5c31\u603b\u662f\u53ef\u5199\u7684\u3002 UDP\u6ca1\u6709\u53d1\u9001\u7f13\u51b2\u533a\uff0c\u53ea\u6709\u53d1\u9001\u7f13\u51b2\u533a\u7684\u5927\u5c0f\u3002<\/p>\n<p>SO_RCVTIMEO \u63a5\u6536\u8d85\u65f6 struct timeval<br \/>\nSO_SNDTIMEO \u53d1\u9001\u8d85\u65f6 struct timeval<br \/>\nSO_REUSERADDR \u5141\u8bb8\u91cd\u7528\u672c\u5730\u5730\u5740\u548c\u7aef\u53e3 int<br \/>\n\u5145\u8bb8\u7ed1\u5b9a\u5df2\u88ab\u4f7f\u7528\u7684\u5730\u5740\uff08\u6216\u7aef\u53e3\u53f7\uff09\uff0c\u53ef\u4ee5\u53c2\u8003bind\u7684man<\/p>\n<p>SO_EXCLUSIVEADDRUSE<br \/>\n\u72ec\u5360\u6a21\u5f0f\u4f7f\u7528\u7aef\u53e3,\u5c31\u662f\u4e0d\u5145\u8bb8\u548c\u5176\u5b83\u7a0b\u5e8f\u4f7f\u7528SO_REUSEADDR\u5171\u4eab\u7684\u4f7f\u7528\u67d0\u4e00\u7aef\u53e3\u3002<br \/>\n\u5728\u786e\u5b9a\u591a\u91cd\u7ed1\u5b9a\u4f7f\u7528\u8c01\u7684\u65f6\u5019\uff0c\u6839\u636e\u4e00\u6761\u539f\u5219\u662f\u8c01\u7684\u6307\u5b9a\u6700\u660e\u786e\u5219\u5c06\u5305\u9012\u4ea4\u7ed9\u8c01\uff0c\u800c\u4e14\u6ca1\u6709\u6743\u9650\u4e4b\u5206\uff0c\u4e5f\u5c31\u662f\u8bf4\u4f4e\u7ea7\u6743\u9650\u7684\u7528\u6237\u662f\u53ef\u4ee5\u91cd\u7ed1\u5b9a\u5728\u9ad8\u7ea7\u6743\u9650\u5982\u670d\u52a1\u542f\u52a8\u7684\u7aef\u53e3\u4e0a\u7684,\u8fd9\u662f\u975e\u5e38\u91cd\u5927\u7684\u4e00\u4e2a\u5b89\u5168\u9690\u60a3,<br \/>\n\u5982\u679c\u4e0d\u60f3\u8ba9\u81ea\u5df1\u7a0b\u5e8f\u88ab\u76d1\u542c\uff0c\u90a3\u4e48\u4f7f\u7528\u8fd9\u4e2a\u9009\u9879<\/p>\n<p>SO_TYPE \u83b7\u5f97\u5957\u63a5\u5b57\u7c7b\u578b int<br \/>\nSO_BSDCOMPAT \u4e0eBSD\u7cfb\u7edf\u517c\u5bb9 int<\/p>\n<p>==========================================================================<br \/>\nIPPROTO_IP<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\nIP_HDRINCL \u5728\u6570\u636e\u5305\u4e2d\u5305\u542bIP\u9996\u90e8 int<br \/>\n\u8fd9\u4e2a\u9009\u9879\u5e38\u7528\u4e8e\u9ed1\u5ba2\u6280\u672f\u4e2d\uff0c\u9690\u85cf\u81ea\u5df1\u7684IP\u5730\u5740<\/p>\n<p>IP_OPTINOS IP\u9996\u90e8\u9009\u9879 int<br \/>\nIP_TOS \u670d\u52a1\u7c7b\u578b<br \/>\nIP_TTL \u751f\u5b58\u65f6\u95f4 int<\/p>\n<p>\u4ee5\u4e0bIPV4\u9009\u9879\u7528\u4e8e\u7ec4\u64ad<br \/>\nIPv4 \u9009\u9879 \u6570\u636e\u7c7b\u578b \u63cf \u8ff0<br \/>\nIP_ADD_MEMBERSHIP struct ip_mreq \u52a0\u5165\u5230\u7ec4\u64ad\u7ec4\u4e2d<br \/>\nIP_ROP_MEMBERSHIP struct ip_mreq \u4ece\u7ec4\u64ad\u7ec4\u4e2d\u9000\u51fa<br \/>\nIP_MULTICAST_IF struct ip_mreq \u6307\u5b9a\u63d0\u4ea4\u7ec4\u64ad\u62a5\u6587\u7684\u63a5\u53e3<br \/>\nIP_MULTICAST_TTL u_char \u6307\u5b9a\u63d0\u4ea4\u7ec4\u64ad\u62a5\u6587\u7684TTL<br \/>\nIP_MULTICAST_LOOP u_char \u4f7f\u7ec4\u64ad\u62a5\u6587\u73af\u8def\u6709\u6548\u6216\u65e0\u6548<br \/>\n\u5728\u5934\u6587\u4ef6\u4e2d\u5b9a\u4e49\u4e86ip_mreq\u7ed3\u6784\uff1a<br \/>\n[code:1:63724de67f]<br \/>\nstruct ip_mreq {<br \/>\nstruct in_addr imr_multiaddr; \/* IP multicast address of group *\/<br \/>\nstruct in_addr imr_interface; \/* local IP address of interface *\/<br \/>\n};<br \/>\n[\/code:1:63724de67f]<br \/>\n\u82e5\u8fdb\u7a0b\u8981\u52a0\u5165\u5230\u4e00\u4e2a\u7ec4\u64ad\u7ec4\u4e2d\uff0c\u7528soket\u7684setsockopt()\u51fd\u6570\u53d1\u9001\u8be5\u9009\u9879\u3002\u8be5\u9009\u9879\u7c7b\u578b\u662fip_mreq\u7ed3\u6784\uff0c\u5b83\u7684\u7b2c\u4e00\u4e2a\u5b57\u6bb5imr_multiaddr\u6307\u5b9a\u4e86\u7ec4\u64ad\u7ec4\u7684\u5730\u5740\uff0c\u7b2c\u4e8c\u4e2a\u5b57\u6bb5imr_interface\u6307\u5b9a\u4e86\u63a5\u53e3\u7684IPv4\u5730\u5740\u3002<br \/>\nIP_DROP_MEMBERSHIP<br \/>\n\u8be5\u9009\u9879\u7528\u6765\u4ece\u67d0\u4e2a\u7ec4\u64ad\u7ec4\u4e2d\u9000\u51fa\u3002\u6570\u636e\u7ed3\u6784ip_mreq\u7684\u4f7f\u7528\u65b9\u6cd5\u4e0e\u4e0a\u9762\u76f8\u540c\u3002<br \/>\nIP_MULTICAST_IF<br \/>\n\u8be5\u9009\u9879\u53ef\u4ee5\u4fee\u6539\u7f51\u7edc\u63a5\u53e3\uff0c\u5728\u7ed3\u6784ip_mreq\u4e2d\u5b9a\u4e49\u65b0\u7684\u63a5\u53e3\u3002<br \/>\nIP_MULTICAST_TTL<br \/>\n\u8bbe\u7f6e\u7ec4\u64ad\u62a5\u6587\u7684\u6570\u636e\u5305\u7684TTL\uff08\u751f\u5b58\u65f6\u95f4\uff09\u3002\u9ed8\u8ba4\u503c\u662f1\uff0c\u8868\u793a\u6570\u636e\u5305\u53ea\u80fd\u5728\u672c\u5730\u7684\u5b50\u7f51\u4e2d\u4f20\u9001\u3002<br \/>\nIP_MULTICAST_LOOP<br \/>\n\u7ec4\u64ad\u7ec4\u4e2d\u7684\u6210\u5458\u81ea\u5df1\u4e5f\u4f1a\u6536\u5230\u5b83\u5411\u672c\u7ec4\u53d1\u9001\u7684\u62a5\u6587\u3002\u8fd9\u4e2a\u9009\u9879\u7528\u4e8e\u9009\u62e9\u662f\u5426\u6fc0\u6d3b\u8fd9\u79cd\u72b6\u6001\u3002<\/p>\n<p>\u65e0\u53cc \u56de\u590d\u4e8e\uff1a2003-05-08 21:21:52<\/p>\n<p>IPPRO_TCP<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\nTCP_MAXSEG TCP\u6700\u5927\u6570\u636e\u6bb5\u7684\u5927\u5c0f int<br \/>\n\u83b7 \u53d6\u6216\u8bbe\u7f6eTCP\u8fde\u63a5\u7684\u6700\u5927\u5206\u8282\u5927\u5c0f(MSS)\u3002\u8fd4\u56de\u503c\u662f\u6211\u4eec\u7684TCP\u53d1\u9001\u7ed9\u53e6\u4e00\u7aef\u7684\u6700\u5927 \u6570\u636e\u91cf\uff0c\u5b83\u5e38\u5e38\u5c31\u662f\u7531\u53e6\u4e00\u7aef\u7528SYN\u5206\u8282\u901a\u544a\u7684MSS\uff0c\u9664\u975e\u6211\u4eec\u7684TCP\u9009\u62e9\u4f7f\u7528\u4e00\u4e2a\u6bd4 \u5bf9\u65b9\u901a\u544a\u7684MSS\u5c0f\u4e9b\u7684\u503c\u3002\u5982\u679c\u6b64\u503c\u5728\u5957\u63a5\u53e3\u8fde\u63a5\u4e4b\u524d\u53d6\u5f97\uff0c\u5219\u8fd4\u56de\u503c\u4e3a\u672a\u4ece\u53e6\u00b7\u2014\u7aef \u6536\u5230Mss\u9009\u9879\u7684\u60c5\u51b5\u4e0b\u6240\u7528\u7684\u7f3a\u7701\u503c\u3002\u5c0f\u4e8e\u6b64\u8fd4\u56de\u503c\u7684\u4fe1\u53ef\u80fd\u771f\u6b63\u7528\u5728\u8fde\u63a5\u4e0a\uff0c\u56e0\u4e3a\u8b6c \u5982\u8bf4\u4f7f\u7528\u65f6\u95f4\u6233\u9009\u9879\u7684\u8bdd\uff0c\u5b83\u5728\u6bcf\u4e2a\u5206\u8282\u4e0a\u5360\u752812\u5b57\u8282\u7684TCP\u9009\u9879\u5bb9\u91cf\u3002\u6211\u4eec\u7684TcP\u5c06 \u53d1\u9001\u7684\u6bcf\u4e2a\u5206\u8282\u7684\u6700\u5927\u6570\u636e\u91cf\u4e5f\u53ef\u5728\u8fde\u63a5\u5b58\u6d3b\u671f\u5185\u6539\u53d8\uff0c\u4f46\u524d\u63d0\u662fTCP\u8981\u652f\u6301\u8def\u5f84MTU \u53d1\u73b0\u529f\u80fd\u3002\u5982\u679c\u5230\u5bf9\u65b9\u7684\u8def\u5f84\u6539\u53d8\u4e86\uff0c\u6b64\u503c\u53ef\u4e0a\u4e0b\u8c03\u6574\u3002<br \/>\nTCP_NODELAY \u4e0d\u4f7f\u7528Nagle\u7b97\u6cd5 int<\/p>\n<p>\u6307\u5b9aTCP\u5f00\u59cb\u53d1\u9001\u4fdd\u6301\u5b58\u6d3b\u63a2\u6d4b\u5206\u8282\u524d\u4ee5\u79d2\u4e3a\u5355\u4f4d\u7684\u8fde\u63a5\u7a7a\u95f2\u65f6\u95f4\u3002\u7f3a\u7701\u503c\u81f3\u5c11\u5fc5\u987b\u4e3a7200\u79d2\uff0c\u53732\u5c0f\u65f6\u3002\u6b64\u9009\u9879\u4ec5\u5728SO_KEPALIVEE\u5957\u63a5\u53e3\u9009\u9879\u6253\u5f00\u65f6\u624d\u6709\u6548\u3002<\/p>\n<p>TCP_NODELAY \u548c TCP_CORK\uff0c<br \/>\n\u8fd9 \u4e24\u4e2a\u9009\u9879\u90fd\u5bf9\u7f51\u7edc\u8fde\u63a5\u7684\u884c\u4e3a\u5177\u6709\u91cd\u8981\u7684\u4f5c\u7528\u3002\u8bb8\u591aUNIX\u7cfb\u7edf\u90fd\u5b9e\u73b0\u4e86TCP_NODELAY\u9009\u9879\uff0c\u4f46\u662f\uff0cTCP_CORK\u5219\u662fLinux\u7cfb\u7edf\u6240\u72ec\u6709\u7684\u800c \u4e14\u76f8\u5bf9\u8f83\u65b0\uff1b\u5b83\u9996\u5148\u5728\u5185\u6838\u7248\u672c2.4\u4e0a\u5f97\u4ee5\u5b9e\u73b0\u3002\u6b64\u5916\uff0c\u5176\u4ed6UNIX\u7cfb\u7edf\u7248\u672c\u4e5f\u6709\u529f\u80fd\u7c7b\u4f3c\u7684\u9009\u9879\uff0c\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5728\u67d0\u79cd\u7531BSD\u6d3e\u751f\u7684\u7cfb\u7edf\u4e0a\u7684 TCP_NOPUSH\u9009\u9879\u5176\u5b9e\u5c31\u662fTCP_CORK\u7684\u4e00\u90e8\u5206\u5177\u4f53\u5b9e\u73b0\u3002<br \/>\nTCP_NODELAY\u548cTCP_CORK\u57fa\u672c\u4e0a\u63a7\u5236\u4e86\u5305\u7684 \u201cNagle\u5316\u201d\uff0cNagle\u5316\u5728\u8fd9\u91cc\u7684\u542b\u4e49\u662f\u91c7\u7528Nagle\u7b97\u6cd5\u628a\u8f83\u5c0f\u7684\u5305\u7ec4\u88c5\u4e3a\u66f4\u5927\u7684\u5e27\u3002John Nagle\u662fNagle\u7b97\u6cd5\u7684\u53d1\u660e\u4eba\uff0c\u540e\u8005\u5c31\u662f\u7528\u4ed6\u7684\u540d\u5b57\u6765\u547d\u540d\u7684\uff0c\u4ed6\u57281984\u5e74\u9996\u6b21\u7528\u8fd9\u79cd\u65b9\u6cd5\u6765\u5c1d\u8bd5\u89e3\u51b3\u798f\u7279\u6c7d\u8f66\u516c\u53f8\u7684\u7f51\u7edc\u62e5\u585e\u95ee\u9898\uff08\u6b32\u4e86\u89e3\u8be6\u60c5\u8bf7\u53c2 \u770bIETF RFC 896\uff09\u3002\u4ed6\u89e3\u51b3\u7684\u95ee\u9898\u5c31\u662f\u6240\u8c13\u7684silly window syndrome \uff0c\u4e2d\u6587\u79f0\u201c\u611a\u8822\u7a97\u53e3\u75c7\u5019\u7fa4\u201d\uff0c\u5177\u4f53\u542b\u4e49\u662f\uff0c\u56e0\u4e3a\u666e\u904d\u7ec8\u7aef\u5e94\u7528\u7a0b\u5e8f\u6bcf\u4ea7\u751f\u4e00\u6b21\u51fb\u952e\u64cd\u4f5c\u5c31\u4f1a\u53d1\u9001\u4e00\u4e2a\u5305\uff0c\u800c\u5178\u578b\u60c5\u51b5\u4e0b\u4e00\u4e2a\u5305\u4f1a\u62e5\u6709\u4e00\u4e2a\u5b57\u8282\u7684\u6570\u636e\u8f7d\u8377\u4ee5\u53ca40 \u4e2a\u5b57\u8282\u957f\u7684\u5305\u5934\uff0c\u4e8e\u662f\u4ea7\u751f4000%\u7684\u8fc7\u8f7d\uff0c\u5f88\u8f7b\u6613\u5730\u5c31\u80fd\u4ee4\u7f51\u7edc\u53d1\u751f\u62e5\u585e,\u3002 Nagle\u5316\u540e\u6765\u6210\u4e86\u4e00\u79cd\u6807\u51c6\u5e76\u4e14\u7acb\u5373\u5728\u56e0\u7279\u7f51\u4e0a\u5f97\u4ee5\u5b9e\u73b0\u3002\u5b83\u73b0\u5728\u5df2\u7ecf\u6210\u4e3a\u7f3a\u7701\u914d\u7f6e\u4e86\uff0c\u4f46\u5728\u6211\u4eec\u770b\u6765\uff0c\u6709\u4e9b\u573a\u5408\u4e0b\u628a\u8fd9\u4e00\u9009\u9879\u5173\u6389\u4e5f\u662f\u5408\u4e4e\u9700\u8981\u7684\u3002<br \/>\n\u73b0 \u5728\u8ba9\u6211\u4eec\u5047\u8bbe\u67d0\u4e2a\u5e94\u7528\u7a0b\u5e8f\u53d1\u51fa\u4e86\u4e00\u4e2a\u8bf7\u6c42\uff0c\u5e0c\u671b\u53d1\u9001\u5c0f\u5757\u6570\u636e\u3002\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u7acb\u5373\u53d1\u9001\u6570\u636e\u6216\u8005\u7b49\u5f85\u4ea7\u751f\u66f4\u591a\u7684\u6570\u636e\u7136\u540e\u518d\u4e00\u6b21\u53d1\u9001\u4e24\u79cd\u7b56\u7565\u3002\u5982\u679c\u6211\u4eec\u9a6c\u4e0a\u53d1\u9001 \u6570\u636e\uff0c\u90a3\u4e48\u4ea4\u4e92\u6027\u7684\u4ee5\u53ca\u5ba2\u6237\/\u670d\u52a1\u5668\u578b\u7684\u5e94\u7528\u7a0b\u5e8f\u5c06\u6781\u5927\u5730\u53d7\u76ca\u3002\u4f8b\u5982\uff0c\u5f53\u6211\u4eec\u6b63\u5728\u53d1\u9001\u4e00\u4e2a\u8f83\u77ed\u7684\u8bf7\u6c42\u5e76\u4e14\u7b49\u5019\u8f83\u5927\u7684\u54cd\u5e94\u65f6\uff0c\u76f8\u5173\u8fc7\u8f7d\u4e0e\u4f20\u8f93\u7684\u6570\u636e\u603b\u91cf\u76f8\u6bd4 \u5c31\u4f1a\u6bd4\u8f83\u4f4e\uff0c\u800c\u4e14\uff0c\u5982\u679c\u8bf7\u6c42\u7acb\u5373\u53d1\u51fa\u90a3\u4e48\u54cd\u5e94\u65f6\u95f4\u4e5f\u4f1a\u5feb\u4e00\u4e9b\u3002\u4ee5\u4e0a\u64cd\u4f5c\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e\u5957\u63a5\u5b57\u7684TCP_NODELAY\u9009\u9879\u6765\u5b8c\u6210\uff0c\u8fd9\u6837\u5c31\u7981\u7528\u4e86Nagle\u7b97 \u6cd5\u3002<br \/>\n\u53e6\u5916\u4e00\u79cd\u60c5\u51b5\u5219\u9700\u8981\u6211\u4eec\u7b49\u5230\u6570\u636e\u91cf\u8fbe\u5230\u6700\u5927\u65f6\u624d\u901a\u8fc7\u7f51\u7edc\u4e00\u6b21\u53d1\u9001\u5168\u90e8\u6570\u636e\uff0c\u8fd9\u79cd\u6570\u636e\u4f20\u8f93\u65b9\u5f0f\u6709\u76ca\u4e8e\u5927\u91cf\u6570\u636e\u7684\u901a\u4fe1\u6027\u80fd\uff0c\u5178\u578b\u7684\u5e94\u7528\u5c31\u662f\u6587\u4ef6\u670d \u52a1\u5668\u3002\u5e94\u7528 Nagle\u7b97\u6cd5\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u5c31\u4f1a\u4ea7\u751f\u95ee\u9898\u3002\u4f46\u662f\uff0c\u5982\u679c\u4f60\u6b63\u5728\u53d1\u9001\u5927\u91cf\u6570\u636e\uff0c\u4f60\u53ef\u4ee5\u8bbe\u7f6eTCP_CORK\u9009\u9879\u7981\u7528Nagle\u5316\uff0c\u5176\u65b9\u5f0f\u6b63\u597d\u540c TCP_NODELAY\u76f8\u53cd\uff08TCP_CORK \u548c TCP_NODELAY \u662f\u4e92\u76f8\u6392\u65a5\u7684\uff09\u3002\u4e0b\u9762\u5c31\u8ba9\u6211\u4eec\u4ed4\u7ec6\u5206\u6790\u4e0b\u5176\u5de5\u4f5c\u539f\u7406\u3002<br \/>\n\u5047\u8bbe\u5e94\u7528\u7a0b\u5e8f \u4f7f\u7528sendfile()\u51fd\u6570\u6765\u8f6c\u79fb\u5927\u91cf\u6570\u636e\u3002\u5e94\u7528\u534f\u8bae\u901a\u5e38\u8981\u6c42\u53d1\u9001\u67d0\u4e9b\u4fe1\u606f\u6765\u9884\u5148\u89e3\u91ca\u6570\u636e\uff0c\u8fd9\u4e9b\u4fe1\u606f\u5176\u5b9e\u5c31\u662f\u62a5\u5934\u5185\u5bb9\u3002\u5178\u578b\u60c5\u51b5\u4e0b\u62a5\u5934\u5f88\u5c0f\uff0c\u800c\u4e14\u5957\u63a5\u5b57 \u4e0a\u8bbe\u7f6e\u4e86TCP_NODELAY\u3002\u6709\u62a5\u5934\u7684\u5305\u5c06\u88ab\u7acb\u5373\u4f20\u8f93\uff0c\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff08\u53d6\u51b3\u4e8e\u5185\u90e8\u7684\u5305\u8ba1\u6570\u5668\uff09\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u5305\u6210\u529f\u5730\u88ab\u5bf9\u65b9\u6536\u5230\u540e\u9700\u8981\u8bf7\u6c42\u5bf9\u65b9\u786e\u8ba4\u3002\u8fd9 \u6837\uff0c\u5927\u91cf\u6570\u636e\u7684\u4f20\u8f93\u5c31\u4f1a\u88ab\u63a8\u8fdf\u800c\u4e14\u4ea7\u751f\u4e86\u4e0d\u5fc5\u8981\u7684\u7f51\u7edc\u6d41\u91cf\u4ea4\u6362\u3002<br \/>\n\u4f46\u662f\uff0c\u5982\u679c\u6211\u4eec\u5728\u5957\u63a5\u5b57\u4e0a\u8bbe\u7f6e\u4e86TCP_CORK\uff08\u53ef\u4ee5\u6bd4\u55bb\u4e3a\u5728\u7ba1\u9053\u4e0a\u63d2\u5165 \u201c\u585e\u5b50\u201d\uff09\u9009\u9879\uff0c\u5177\u6709\u62a5\u5934\u7684\u5305\u5c31\u4f1a\u586b\u8865\u5927\u91cf\u7684\u6570\u636e\uff0c\u6240\u6709\u7684\u6570\u636e\u90fd\u6839\u636e\u5927\u5c0f\u81ea\u52a8\u5730\u901a\u8fc7\u5305\u4f20\u8f93\u51fa\u53bb\u3002\u5f53\u6570\u636e\u4f20\u8f93\u5b8c\u6210\u65f6\uff0c\u6700\u597d\u53d6\u6d88TCP_CORK \u9009\u9879\u8bbe\u7f6e\u7ed9\u8fde\u63a5\u201c\u62d4\u53bb\u585e\u5b50\u201d\u4ee5\u4fbf\u4efb\u4e00\u90e8\u5206\u7684\u5e27\u90fd\u80fd\u53d1\u9001\u51fa\u53bb\u3002\u8fd9\u540c\u201c\u585e\u4f4f\u201d\u7f51\u7edc\u8fde\u63a5\u540c\u7b49\u91cd\u8981\u3002<br \/>\n\u603b\u800c\u8a00\u4e4b\uff0c\u5982\u679c\u4f60\u80af\u5b9a\u80fd\u4e00\u8d77\u53d1\u9001\u591a\u4e2a\u6570\u636e\u96c6\u5408\uff08\u4f8b\u5982HTTP\u54cd\u5e94\u7684\u5934\u548c\u6b63\u6587\uff09\uff0c\u90a3\u4e48\u6211\u4eec\u5efa\u8bae\u4f60\u8bbe\u7f6eTCP_CORK\u9009\u9879\uff0c\u8fd9\u6837\u5728\u8fd9\u4e9b\u6570\u636e\u4e4b\u95f4\u4e0d\u5b58\u5728\u5ef6\u8fdf\u3002\u80fd\u6781\u5927\u5730\u6709\u76ca\u4e8eWWW\u3001FTP\u4ee5\u53ca\u6587\u4ef6\u670d\u52a1\u5668\u7684\u6027\u80fd\uff0c\u540c\u65f6\u4e5f\u7b80\u5316\u4e86\u4f60\u7684\u5de5\u4f5c\u3002\u793a\u4f8b\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<p>intfd, on = 1;<br \/>\n\u2026<br \/>\n\/* \u6b64\u5904\u662f\u521b\u5efa\u5957\u63a5\u5b57\u7b49\u64cd\u4f5c\uff0c\u51fa\u4e8e\u7bc7\u5e45\u7684\u8003\u8651\u7701\u7565*\/<br \/>\n\u2026<br \/>\nsetsockopt (fd, SOL_TCP, TCP_CORK, &amp;on, sizeof (on)); \/* cork *\/<br \/>\nwrite (fd, \u2026);<br \/>\nfprintf (fd, \u2026);<br \/>\nsendfile (fd, \u2026);<br \/>\nwrite (fd, \u2026);<br \/>\nsendfile (fd, \u2026);<br \/>\n\u2026<br \/>\non = 0;<br \/>\nsetsockopt (fd, SOL_TCP, TCP_CORK, &amp;on, sizeof (on)); \/* \u62d4\u53bb\u585e\u5b50 *\/<\/p>\n<p>\u4e0d\u5e78\u7684\u662f\uff0c\u8bb8\u591a\u5e38\u7528\u7684\u7a0b\u5e8f\u5e76\u6ca1\u6709\u8003\u8651\u5230\u4ee5\u4e0a\u95ee\u9898\u3002\u4f8b\u5982\uff0cEric Allman\u7f16\u5199\u7684sendmail\u5c31\u6ca1\u6709\u5bf9\u5176\u5957\u63a5\u5b57\u8bbe\u7f6e\u4efb\u4f55\u9009\u9879\u3002<\/p>\n<p>Apache HTTPD \u662f\u56e0\u7279\u7f51\u4e0a\u6700\u6d41\u884c\u7684Web\u670d\u52a1\u5668\uff0c\u5b83\u7684\u6240\u6709\u5957\u63a5\u5b57\u5c31\u90fd\u8bbe\u7f6e\u4e86TCP_NODELAY\u9009\u9879\uff0c\u800c\u4e14\u5176\u6027\u80fd\u4e5f\u6df1\u53d7\u5927\u591a\u6570\u7528\u6237\u7684\u6ee1\u610f\u3002\u8fd9\u662f\u4e3a\u4ec0\u4e48\u5462\uff1f\u7b54\u6848\u5c31\u5728\u4e8e\u5b9e \u73b0\u7684\u5dee\u522b\u4e4b\u4e0a\u3002\u7531BSD\u884d\u751f\u7684TCP\/IP\u534f\u8bae\u6808\uff08\u503c\u5f97\u6ce8\u610f\u7684\u662fFreeBSD\uff09\u5728\u8fd9\u79cd\u72b6\u51b5\u4e0b\u7684\u64cd\u4f5c\u5c31\u4e0d\u540c\u3002\u5f53\u5728TCP_NODELAY \u6a21\u5f0f\u4e0b\u63d0\u4ea4\u5927\u91cf\u5c0f\u6570\u636e\u5757\u4f20\u8f93\u65f6\uff0c\u5927\u91cf\u4fe1\u606f\u5c06\u6309\u7167\u4e00\u6b21write()\u51fd\u6570\u8c03\u7528\u53d1\u9001\u4e00\u5757\u6570\u636e\u7684\u65b9\u5f0f\u53d1\u9001\u51fa\u53bb\u3002\u7136\u800c\uff0c\u56e0\u4e3a\u8d1f\u8d23\u8bf7\u6c42\u4ea4\u4ed8\u786e\u8ba4\u7684\u8bb0\u6570\u5668\u662f\u9762\u5411\u5b57\u8282\u800c \u975e\u9762\u5411\u5305\uff08\u5728 Linux\u4e0a\uff09\u7684\uff0c\u6240\u4ee5\u5f15\u5165\u5ef6\u8fdf\u7684\u6982\u7387\u5c31\u964d\u4f4e\u4e86\u5f88\u591a\u3002\u7ed3\u679c\u4ec5\u4ec5\u548c\u5168\u90e8\u6570\u636e\u7684\u5927\u5c0f\u6709\u5173\u7cfb\u3002\u800c Linux \u5728\u7b2c\u4e00\u5305\u5230\u8fbe\u4e4b\u540e\u5c31\u8981\u6c42\u786e\u8ba4\uff0cFreeBSD\u5219\u5728\u8fdb\u884c\u5982\u6b64\u64cd\u4f5c\u4e4b\u524d\u4f1a\u7b49\u5f85\u597d\u51e0\u767e\u4e2a\u5305\u3002<\/p>\n<p>\u5728Linux\u7cfb\u7edf\u4e0a\uff0cTCP_NODELAY\u7684\u6548\u679c\u540c\u4e60\u60ef\u4e8eBSD TCP\/IP\u534f\u8bae\u6808\u7684\u5f00\u53d1\u8005\u6240\u671f\u671b\u7684\u6548\u679c\u6709\u5f88\u5927\u4e0d\u540c\uff0c\u800c\u4e14\u5728Linux\u4e0a\u7684Apache\u6027\u80fd\u8868\u73b0\u4e5f\u4f1a\u66f4\u5dee\u4e9b\u3002\u5176\u4ed6\u5728Linux\u4e0a\u9891\u7e41\u91c7\u7528TCP_NODELAY\u7684\u5e94\u7528\u7a0b\u5e8f\u4e5f\u6709\u540c\u6837\u7684\u95ee\u9898\u3002<\/p>\n<p>TCP_DEFER_ACCEPT<\/p>\n<p>\u6211 \u4eec\u9996\u5148\u8003\u8651\u7684\u7b2c1\u4e2a\u9009\u9879\u662fTCP_DEFER_ACCEPT\uff08\u8fd9\u662fLinux\u7cfb\u7edf\u4e0a\u7684\u53eb\u6cd5\uff0c\u5176\u4ed6\u4e00\u4e9b\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u4e5f\u6709\u540c\u6837\u7684\u9009\u9879\u4f46\u4f7f\u7528\u4e0d\u540c\u7684\u540d\u5b57\uff09\u3002\u4e3a\u4e86\u7406 \u89e3TCP_DEFER_ACCEPT\u9009\u9879\u7684\u5177\u4f53\u601d\u60f3\uff0c\u6211\u4eec\u6709\u5fc5\u8981\u5927\u81f4\u9610\u8ff0\u4e00\u4e0b\u5178\u578b\u7684HTTP\u5ba2\u6237\/\u670d\u52a1\u5668\u4ea4\u4e92\u8fc7\u7a0b\u3002\u8bf7\u56de\u60f3\u4e0bTCP\u662f\u5982\u4f55\u4e0e\u4f20\u8f93\u6570\u636e\u7684\u76ee\u6807 \u5efa\u7acb\u8fde\u63a5\u7684\u3002\u5728\u7f51\u7edc\u4e0a\uff0c\u5728\u5206\u79bb\u7684\u5355\u5143\u4e4b\u95f4\u4f20\u8f93\u7684\u4fe1\u606f\u79f0\u4e3aIP\u5305\uff08\u6216IP \u6570\u636e\u62a5\uff09\u3002\u4e00\u4e2a\u5305\u603b\u6709\u4e00\u4e2a\u643a\u5e26\u670d\u52a1\u4fe1\u606f\u7684\u5305\u5934\uff0c\u5305\u5934\u7528\u4e8e\u5185\u90e8\u534f\u8bae\u7684\u5904\u7406\uff0c\u5e76\u4e14\u5b83\u4e5f\u53ef\u4ee5\u643a\u5e26\u6570\u636e\u8d1f\u8f7d\u3002\u670d\u52a1\u4fe1\u606f\u7684\u5178\u578b\u4f8b\u5b50\u5c31\u662f\u4e00\u5957\u6240\u8c13\u7684\u6807\u5fd7\uff0c\u5b83\u628a\u5305\u6807\u8bb0\u4ee3 \u8868TCP\/IP\u534f\u8bae\u6808\u5185\u7684\u7279\u6b8a\u542b\u4e49\uff0c\u4f8b\u5982\u6536\u5230\u5305\u7684\u6210\u529f\u786e\u8ba4\u7b49\u7b49\u3002\u901a\u5e38\uff0c\u5728\u7ecf\u8fc7\u201c\u6807\u8bb0\u201d\u7684\u5305\u91cc\u643a\u5e26\u8d1f\u8f7d\u662f\u5b8c\u5168\u53ef\u80fd\u7684\uff0c\u4f46\u6709\u65f6\uff0c\u5185\u90e8\u903b\u8f91\u8feb\u4f7fTCP\/IP\u534f\u8bae \u6808\u53d1\u51fa\u53ea\u6709\u5305\u5934\u7684IP\u5305\u3002\u8fd9\u4e9b\u5305\u7ecf\u5e38\u4f1a\u5f15\u53d1\u8ba8\u538c\u7684\u7f51\u7edc\u5ef6\u8fdf\u800c\u4e14\u8fd8\u589e\u52a0\u4e86\u7cfb\u7edf\u7684\u8d1f\u8f7d\uff0c\u7ed3\u679c\u5bfc\u81f4\u7f51\u7edc\u6027\u80fd\u5728\u6574\u4f53\u4e0a\u964d\u4f4e\u3002<br \/>\n\u73b0\u5728\u670d\u52a1\u5668\u521b\u5efa\u4e86\u4e00\u4e2a\u5957\u63a5\u5b57\u540c \u65f6\u7b49\u5f85\u8fde\u63a5\u3002TCP\/IP\u5f0f\u7684\u8fde\u63a5\u8fc7\u7a0b\u5c31\u662f\u6240\u8c13\u201c3\u6b21\u63e1\u624b\u201d\u3002\u9996\u5148\uff0c\u5ba2\u6237\u7a0b\u5e8f\u53d1\u9001\u4e00\u4e2a\u8bbe\u7f6eSYN\u6807\u5fd7\u800c\u4e14\u4e0d\u5e26\u6570\u636e\u8d1f\u8f7d\u7684TCP\u5305\uff08\u4e00\u4e2aSYN\u5305\uff09\u3002\u670d\u52a1\u5668 \u5219\u4ee5\u53d1\u51fa\u5e26SYN\/ACK\u6807\u5fd7\u7684\u6570\u636e\u5305\uff08\u4e00\u4e2aSYN\/ACK\u5305\uff09\u4f5c\u4e3a\u521a\u624d\u6536\u5230\u5305\u7684\u786e\u8ba4\u54cd\u5e94\u3002\u5ba2\u6237\u968f\u540e\u53d1\u9001\u4e00\u4e2aACK\u5305\u786e\u8ba4\u6536\u5230\u4e86\u7b2c2\u4e2a\u5305\u4ece\u800c\u7ed3\u675f\u8fde\u63a5\u8fc7 \u7a0b\u3002\u5728\u6536\u5230\u5ba2\u6237\u53d1\u6765\u7684\u8fd9\u4e2aSYN\/ACK\u5305\u4e4b\u540e\uff0c\u670d\u52a1\u5668\u4f1a\u5524\u9192\u4e00\u4e2a\u63a5\u6536\u8fdb\u7a0b\u7b49\u5f85\u6570\u636e\u5230\u8fbe\u3002\u5f533\u6b21\u63e1\u624b\u5b8c\u6210\u540e\uff0c\u5ba2\u6237\u7a0b\u5e8f\u5373\u5f00\u59cb\u628a\u201c\u6709\u7528\u7684\u201d\u7684\u6570\u636e\u53d1\u9001\u7ed9\u670d\u52a1 \u5668\u3002\u901a\u5e38\uff0c\u4e00\u4e2aHTTP\u8bf7\u6c42\u7684\u91cf\u662f\u5f88\u5c0f\u7684\u800c\u4e14\u5b8c\u5168\u53ef\u4ee5\u88c5\u5230\u4e00\u4e2a\u5305\u91cc\u3002\u4f46\u662f\uff0c\u5728\u4ee5\u4e0a\u7684\u60c5\u51b5\u4e0b\uff0c\u81f3\u5c11\u67094\u4e2a\u5305\u5c06\u7528\u6765\u8fdb\u884c\u53cc\u5411\u4f20\u8f93\uff0c\u8fd9\u6837\u5c31\u589e\u52a0\u4e86\u53ef\u89c2\u7684\u5ef6\u8fdf\u65f6 \u95f4\u3002\u6b64\u5916\uff0c\u4f60\u8fd8\u5f97\u6ce8\u610f\u5230\uff0c\u5728\u201c\u6709\u7528\u7684\u201d\u6570\u636e\u88ab\u53d1\u9001\u4e4b\u524d\uff0c\u63a5\u6536\u65b9\u5df2\u7ecf\u5f00\u59cb\u5728\u7b49\u5f85\u4fe1\u606f\u4e86\u3002<br \/>\n\u4e3a\u4e86\u51cf\u8f7b\u8fd9\u4e9b\u95ee\u9898\u6240\u5e26\u6765\u7684\u5f71\u54cd\uff0cLinux\uff08\u4ee5\u53ca\u5176\u4ed6\u7684\u4e00\u4e9b \u64cd\u4f5c\u7cfb\u7edf\uff09\u5728\u5176TCP\u5b9e\u73b0\u4e2d\u5305\u62ec\u4e86TCP_DEFER_ACCEPT\u9009\u9879\u3002\u5b83\u4eec\u8bbe\u7f6e\u5728\u4fa6\u542c\u5957\u63a5\u5b57\u7684\u670d\u52a1\u5668\u65b9\uff0c\u8be5\u9009\u9879\u547d\u4ee4\u5185\u6838\u4e0d\u7b49\u5f85\u6700\u540e\u7684ACK\u5305\u800c\u4e14\u5728\u7b2c 1\u4e2a\u771f\u6b63\u6709\u6570\u636e\u7684\u5305\u5230\u8fbe\u624d\u521d\u59cb\u5316\u4fa6\u542c\u8fdb\u7a0b\u3002\u5728\u53d1\u9001SYN\/ACK\u5305\u4e4b\u540e\uff0c\u670d\u52a1\u5668\u5c31\u4f1a\u7b49\u5f85\u5ba2\u6237\u7a0b\u5e8f\u53d1\u9001\u542b\u6570\u636e\u7684IP\u5305\u3002\u73b0\u5728\uff0c\u53ea\u9700\u8981\u5728\u7f51\u7edc\u4e0a\u4f20\u90013\u4e2a\u5305\u4e86\uff0c \u800c\u4e14\u8fd8\u663e\u8457\u964d\u4f4e\u4e86\u8fde\u63a5\u5efa\u7acb\u7684\u5ef6\u8fdf\uff0c\u5bf9HTTP\u901a\u4fe1\u800c\u8a00\u5c24\u5176\u5982\u6b64\u3002<br \/>\n\u8fd9\u4e00\u9009\u9879\u5728\u597d\u4e9b\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u90fd\u6709\u76f8\u5e94\u7684\u5bf9\u7b49\u7269\u3002\u4f8b\u5982\uff0c\u5728FreeBSD\u4e0a\uff0c\u540c\u6837\u7684\u884c\u4e3a\u53ef\u4ee5\u7528\u4ee5\u4e0b\u4ee3\u7801\u5b9e\u73b0\uff1a<\/p>\n<p>\/* \u4e3a\u660e\u6670\u8d77\u89c1\uff0c\u6b64\u5904\u7565\u53bb\u65e0\u5173\u4ee3\u7801 *\/<br \/>\nstruct accept_filter_arg af = { &#8220;dataready&#8221;, &#8220;&#8221; };<br \/>\nsetsockopt(s, SOL_SOCKET, SO_ACCEPTFILTER, &amp;af, sizeof(af));<br \/>\n\u8fd9 \u4e2a\u7279\u5f81\u5728FreeBSD\u4e0a\u53eb\u505a\u201c\u63a5\u53d7\u8fc7\u6ee4\u5668\u201d\uff0c\u800c\u4e14\u5177\u6709\u591a\u79cd\u7528\u6cd5\u3002\u4e0d\u8fc7\uff0c\u5728\u51e0\u4e4e\u6240\u6709\u7684\u60c5\u51b5\u4e0b\u5176\u6548\u679c\u4e0eTCP_DEFER_ACCEPT\u662f\u4e00\u6837\u7684\uff1a\u670d\u52a1\u5668\u4e0d \u7b49\u5f85\u6700\u540e\u7684ACK\u5305\u800c\u4ec5\u4ec5\u7b49\u5f85\u643a\u5e26\u6570\u636e\u8d1f\u8f7d\u7684\u5305\u3002\u8981\u4e86\u89e3\u8be5\u9009\u9879\u53ca\u5176\u5bf9\u9ad8\u6027\u80fdWeb\u670d\u52a1\u5668\u7684\u91cd\u8981\u610f\u4e49\u7684\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u8003Apache\u6587\u6863\u4e0a\u7684\u6709\u5173\u5185\u5bb9\u3002<br \/>\n\u5c31HTTP \u5ba2\u6237\/\u670d\u52a1\u5668\u4ea4\u4e92\u800c\u8a00\uff0c\u6709\u53ef\u80fd\u9700\u8981\u6539\u53d8\u5ba2\u6237\u7a0b\u5e8f\u7684\u884c\u4e3a\u3002\u5ba2\u6237\u7a0b\u5e8f\u4e3a\u4ec0\u4e48\u8981\u53d1\u9001\u8fd9\u79cd\u201c\u65e0\u7528\u7684\u201dACK\u5305\u5462\uff1f\u8fd9\u662f\u56e0\u4e3a\uff0cTCP\u534f\u8bae\u6808\u65e0\u6cd5\u77e5\u9053ACK\u5305\u7684\u72b6\u6001\u3002 \u5982\u679c\u91c7\u7528FTP\u800c\u975eHTTP\uff0c\u90a3\u4e48\u5ba2\u6237\u7a0b\u5e8f\u76f4\u5230\u63a5\u6536\u4e86FTP\u670d\u52a1\u5668\u63d0\u793a\u7684\u6570\u636e\u5305\u4e4b\u540e\u624d\u53d1\u9001\u6570\u636e\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5ef6\u8fdf\u7684ACK\u5c06\u5bfc\u81f4\u5ba2\u6237\/\u670d\u52a1\u5668\u4ea4\u4e92\u51fa\u73b0\u5ef6 \u8fdf\u3002\u4e3a\u4e86\u786e\u5b9aACK\u662f\u5426\u5fc5\u8981\uff0c\u5ba2\u6237\u7a0b\u5e8f\u5fc5\u987b\u77e5\u9053\u5e94\u7528\u7a0b\u5e8f\u534f\u8bae\u53ca\u5176\u5f53\u524d\u72b6\u6001\u3002\u8fd9\u6837\uff0c\u4fee\u6539\u5ba2\u6237\u884c\u4e3a\u5c31\u6210\u4e3a\u5fc5\u8981\u4e86\u3002<br \/>\n\u5bf9Linux\u5ba2\u6237\u7a0b\u5e8f\u6765\u8bf4\uff0c\u6211\u4eec\u8fd8\u53ef \u4ee5\u91c7\u7528\u53e6\u4e00\u4e2a\u9009\u9879\uff0c\u5b83\u4e5f\u88ab\u53eb\u505aTCP_DEFER_ACCEPT\u3002\u6211\u4eec\u77e5\u9053\uff0c\u5957\u63a5\u5b57\u5206\u6210\u4e24\u79cd\u7c7b\u578b\uff0c\u4fa6\u542c\u5957\u63a5\u5b57\u548c\u8fde\u63a5\u5957\u63a5\u5b57\uff0c\u6240\u4ee5\u5b83\u4eec\u4e5f\u5404\u81ea\u5177\u6709\u76f8\u5e94\u7684 TCP\u9009\u9879\u96c6\u5408\u3002\u56e0\u6b64\uff0c\u7ecf\u5e38\u540c\u65f6\u91c7\u7528\u7684\u8fd9\u4e24\u7c7b\u9009\u9879\u5374\u5177\u6709\u540c\u6837\u7684\u540d\u5b57\u4e5f\u662f\u5b8c\u5168\u53ef\u80fd\u7684\u3002\u5728\u8fde\u63a5\u5957\u63a5\u5b57\u4e0a\u8bbe\u7f6e\u8be5\u9009\u9879\u4ee5\u540e\uff0c\u5ba2\u6237\u5728\u6536\u5230\u4e00\u4e2aSYN\/ACK\u5305\u4e4b\u540e\u5c31 \u4e0d\u518d\u53d1\u9001ACK\u5305\uff0c\u800c\u662f\u7b49\u5f85\u7528\u6237\u7a0b\u5e8f\u7684\u4e0b\u4e00\u4e2a\u53d1\u9001\u6570\u636e\u8bf7\u6c42\uff1b\u56e0\u6b64\uff0c\u670d\u52a1\u5668\u53d1\u9001\u7684\u5305\u4e5f\u5c31\u76f8\u5e94\u51cf\u5c11\u4e86\u3002<\/p>\n<p>TCP_QUICKACK<\/p>\n<p>\u963b \u6b62\u56e0\u53d1\u9001\u65e0\u7528\u5305\u800c\u5f15\u53d1\u5ef6\u8fdf\u7684\u53e6\u4e00\u4e2a\u65b9\u6cd5\u662f\u4f7f\u7528TCP_QUICKACK\u9009\u9879\u3002\u8fd9\u4e00\u9009\u9879\u4e0e TCP_DEFER_ACCEPT\u4e0d\u540c\uff0c\u5b83\u4e0d\u4f46\u80fd\u7528\u4f5c\u7ba1\u7406\u8fde\u63a5\u5efa\u7acb\u8fc7\u7a0b\u800c\u4e14\u5728\u6b63\u5e38\u6570\u636e\u4f20\u8f93\u8fc7\u7a0b\u671f\u95f4\u4e5f\u53ef\u4ee5\u4f7f\u7528\u3002\u53e6\u5916\uff0c\u5b83\u80fd\u5728\u5ba2\u6237\/\u670d\u52a1\u5668\u8fde\u63a5\u7684\u4efb\u4f55\u4e00\u65b9\u8bbe \u7f6e\u3002\u5982\u679c\u77e5\u9053\u6570\u636e\u4e0d\u4e45\u5373\u5c06\u53d1\u9001\uff0c\u90a3\u4e48\u63a8\u8fdfACK\u5305\u7684\u53d1\u9001\u5c31\u4f1a\u6d3e\u4e0a\u7528\u573a\uff0c\u800c\u4e14\u6700\u597d\u5728\u90a3\u4e2a\u643a\u5e26\u6570\u636e\u7684\u6570\u636e\u5305\u4e0a\u8bbe\u7f6eACK \u6807\u5fd7\u4ee5\u4fbf\u628a\u7f51\u7edc\u8d1f\u8f7d\u51cf\u5230\u6700\u5c0f\u3002\u5f53\u53d1\u9001\u65b9\u80af\u5b9a\u6570\u636e\u5c06\u88ab\u7acb\u5373\u53d1\u9001\uff08\u591a\u4e2a\u5305\uff09\u65f6\uff0cTCP_QUICKACK \u9009\u9879\u53ef\u4ee5\u8bbe\u7f6e\u4e3a0\u3002\u5bf9\u5904\u4e8e\u201c\u8fde\u63a5\u201d\u72b6\u6001\u4e0b\u7684\u5957\u63a5\u5b57\u8be5\u9009\u9879\u7684\u7f3a\u7701\u503c\u662f1\uff0c\u9996\u6b21\u4f7f\u7528\u4ee5\u540e\u5185\u6838\u5c06\u628a\u8be5\u9009\u9879\u7acb\u5373\u590d\u4f4d\u4e3a1\uff08\u8fd9\u662f\u4e2a\u4e00\u6b21\u6027\u7684\u9009\u9879\uff09\u3002<br \/>\n\u5728\u67d0\u4e9b\u60c5\u5f62\u4e0b\uff0c\u53d1\u51faACK\u5305\u5219\u975e\u5e38\u6709\u7528\u3002ACK\u5305\u5c06\u786e\u8ba4\u6570\u636e\u5757\u7684\u63a5\u6536\uff0c\u800c\u4e14\uff0c\u5f53\u4e0b\u4e00\u5757\u88ab\u5904\u7406\u65f6\u4e0d\u81f3\u4e8e\u5f15\u5165\u5ef6\u8fdf\u3002\u8fd9\u79cd\u6570\u636e\u4f20\u8f93\u6a21\u5f0f\u5bf9\u4ea4\u4e92\u8fc7\u7a0b\u662f\u76f8\u5f53\u5178\u578b\u7684\uff0c\u56e0\u4e3a\u6b64\u7c7b\u60c5\u51b5\u4e0b\u7528\u6237\u7684\u8f93\u5165\u65f6\u523b\u65e0\u6cd5\u9884\u6d4b\u3002\u5728Linux\u7cfb\u7edf\u4e0a\u8fd9\u5c31\u662f\u7f3a\u7701\u7684\u5957\u63a5\u5b57\u884c\u4e3a\u3002<br \/>\n\u5728 \u4e0a\u8ff0\u60c5\u51b5\u4e0b\uff0c\u5ba2\u6237\u7a0b\u5e8f\u5728\u5411\u670d\u52a1\u5668\u53d1\u9001HTTP\u8bf7\u6c42\uff0c\u800c\u9884\u5148\u5c31\u77e5\u9053\u8bf7\u6c42\u5305\u5f88\u77ed\u6240\u4ee5\u5728\u8fde\u63a5\u5efa\u7acb\u4e4b\u540e\u5c31\u5e94\u8be5\u7acb\u5373\u53d1\u9001\uff0c\u8fd9\u53ef\u8c13HTTP\u7684\u5178\u578b\u5de5\u4f5c\u65b9\u5f0f\u3002\u65e2\u7136\u6ca1\u6709\u5fc5 \u8981\u53d1\u9001\u4e00\u4e2a\u7eaf\u7cb9\u7684ACK\u5305\uff0c\u6240\u4ee5\u8bbe\u7f6eTCP_QUICKACK\u4e3a0\u4ee5\u63d0\u9ad8\u6027\u80fd\u662f\u5b8c\u5168\u53ef\u80fd\u7684\u3002\u5728\u670d\u52a1\u5668\u65b9\uff0c\u8fd9\u4e24\u79cd\u9009\u9879\u90fd\u53ea\u80fd\u5728\u4fa6\u542c\u5957\u63a5\u5b57\u4e0a\u8bbe\u7f6e\u4e00\u6b21\u3002\u6240\u6709\u7684 \u5957\u63a5\u5b57\uff0c\u4e5f\u5c31\u662f\u88ab\u63a5\u53d7\u547c\u53eb\u95f4\u63a5\u521b\u5efa\u7684\u5957\u63a5\u5b57\u5219\u4f1a\u7ee7\u627f\u539f\u6709\u5957\u63a5\u5b57\u7684\u6240\u6709\u9009\u9879\u3002<br \/>\n\u901a\u8fc7TCP_CORK\u3001TCP_DEFER_ACCEPT\u548c TCP_QUICKACK\u9009\u9879\u7684\u7ec4\u5408\uff0c\u53c2\u4e0e\u6bcf\u4e00HTTP\u4ea4\u4e92\u7684\u6570\u636e\u5305\u6570\u91cf\u5c06\u88ab\u964d\u4f4e\u5230\u6700\u5c0f\u7684\u53ef\u63a5\u53d7\u6c34\u5e73\uff08\u6839\u636eTCP\u534f\u8bae\u7684\u8981\u6c42\u548c\u5b89\u5168\u65b9\u9762\u7684\u8003\u8651\uff09\u3002\u7ed3\u679c\u4e0d\u4ec5 \u662f\u83b7\u5f97\u66f4\u5feb\u7684\u6570\u636e\u4f20\u8f93\u548c\u8bf7\u6c42\u5904\u7406\u901f\u5ea6\u800c\u4e14\u8fd8\u4f7f\u5ba2\u6237\/\u670d\u52a1\u5668\u53cc\u5411\u5ef6\u8fdf\u5b9e\u73b0\u4e86\u6700\u5c0f\u5316\u3002<\/p>\n<p>\u4e8c\u3001\u4f7f\u7528\u4f8b\u5b50\u8bf4\u660e<\/p>\n<p>1.closesocket\uff08\u4e00\u822c\u4e0d\u4f1a\u7acb\u5373\u5173\u95ed\u800c\u7ecf\u5386TIME_WAIT\u7684\u8fc7\u7a0b\uff09\u540e\u60f3\u7ee7\u7eed\u91cd\u7528\u8be5socket\uff1a<br \/>\nBOOL bReuseaddr=TRUE;<br \/>\nsetsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&amp;bReuseaddr,sizeof(BOOL));<br \/>\n2. \u5982\u679c\u8981\u5df2\u7ecf\u5904\u4e8e\u8fde\u63a5\u72b6\u6001\u7684soket\u5728\u8c03\u7528closesocket\u540e\u5f3a\u5236\u5173\u95ed\uff0c\u4e0d\u7ecf\u5386<br \/>\nTIME_WAIT\u7684\u8fc7\u7a0b\uff1a<br \/>\nBOOL bDontLinger = FALSE;<br \/>\nsetsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&amp;bDontLinger,sizeof(BOOL));<br \/>\n3.\u5728send(),recv()\u8fc7\u7a0b\u4e2d\u6709\u65f6\u7531\u4e8e\u7f51\u7edc\u72b6\u51b5\u7b49\u539f\u56e0\uff0c\u53d1\u6536\u4e0d\u80fd\u9884\u671f\u8fdb\u884c,\u800c\u8bbe\u7f6e\u6536\u53d1\u65f6\u9650\uff1a<br \/>\nint nNetTimeout=1000;\/\/1\u79d2<br \/>\n\/\/\u53d1\u9001\u65f6\u9650<br \/>\nsetsockopt(socket\uff0cSOL_S0CKET,SO_SNDTIMEO\uff0c(char *)&amp;nNetTimeout,sizeof(int));<br \/>\n\/\/\u63a5\u6536\u65f6\u9650<br \/>\nsetsockopt(socket\uff0cSOL_S0CKET,SO_RCVTIMEO\uff0c(char *)&amp;nNetTimeout,sizeof(int));<br \/>\n4.\u5728send()\u7684\u65f6\u5019\uff0c\u8fd4\u56de\u7684\u662f\u5b9e\u9645\u53d1\u9001\u51fa\u53bb\u7684\u5b57\u8282(\u540c\u6b65)\u6216\u53d1\u9001\u5230socket\u7f13\u51b2\u533a\u7684\u5b57\u8282<br \/>\n(\u5f02\u6b65);\u7cfb\u7edf\u9ed8\u8ba4\u7684\u72b6\u6001\u53d1\u9001\u548c\u63a5\u6536\u4e00\u6b21\u4e3a8688\u5b57\u8282(\u7ea6\u4e3a8.5K)\uff1b\u5728\u5b9e\u9645\u7684\u8fc7\u7a0b\u4e2d\u53d1\u9001\u6570\u636e<br \/>\n\u548c\u63a5\u6536\u6570\u636e\u91cf\u6bd4\u8f83\u5927\uff0c\u53ef\u4ee5\u8bbe\u7f6esocket\u7f13\u51b2\u533a\uff0c\u800c\u907f\u514d\u4e86send(),recv()\u4e0d\u65ad\u7684\u5faa\u73af\u6536\u53d1\uff1a<br \/>\n\/\/ \u63a5\u6536\u7f13\u51b2\u533a<br \/>\nint nRecvBuf=32*1024;\/\/\u8bbe\u7f6e\u4e3a32K<br \/>\nsetsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&amp;nRecvBuf,sizeof(int));<br \/>\n\/\/\u53d1\u9001\u7f13\u51b2\u533a<br \/>\nint nSendBuf=32*1024;\/\/\u8bbe\u7f6e\u4e3a32K<br \/>\nsetsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&amp;nSendBuf,sizeof(int));<br \/>\n5. \u5982\u679c\u5728\u53d1\u9001\u6570\u636e\u7684\u65f6\uff0c\u5e0c\u671b\u4e0d\u7ecf\u5386\u7531\u7cfb\u7edf\u7f13\u51b2\u533a\u5230socket\u7f13\u51b2\u533a\u7684\u62f7\u8d1d\u800c\u5f71\u54cd<br \/>\n\u7a0b\u5e8f\u7684\u6027\u80fd\uff1a<br \/>\nint nZero=0;<br \/>\nsetsockopt(socket\uff0cSOL_S0CKET,SO_SNDBUF\uff0c(char *)&amp;nZero,sizeof(nZero));<br \/>\n6.\u540c\u4e0a\u5728recv()\u5b8c\u6210\u4e0a\u8ff0\u529f\u80fd(\u9ed8\u8ba4\u60c5\u51b5\u662f\u5c06socket\u7f13\u51b2\u533a\u7684\u5185\u5bb9\u62f7\u8d1d\u5230\u7cfb\u7edf\u7f13\u51b2\u533a)\uff1a<br \/>\nint nZero=0;<br \/>\nsetsockopt(socket\uff0cSOL_S0CKET,SO_RCVBUF\uff0c(char *)&amp;nZero,sizeof(int));<br \/>\n7.\u4e00\u822c\u5728\u53d1\u9001UDP\u6570\u636e\u62a5\u7684\u65f6\u5019\uff0c\u5e0c\u671b\u8be5socket\u53d1\u9001\u7684\u6570\u636e\u5177\u6709\u5e7f\u64ad\u7279\u6027\uff1a<br \/>\nBOOL bBroadcast=TRUE;<br \/>\nsetsockopt(s,SOL_SOCKET,SO_BROADCAST,(const char*)&amp;bBroadcast,sizeof(BOOL));<br \/>\n8.\u5728client\u8fde\u63a5\u670d\u52a1\u5668\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u5904\u4e8e\u975e\u963b\u585e\u6a21\u5f0f\u4e0b\u7684socket\u5728connect()\u7684\u8fc7\u7a0b\u4e2d\u53ef<br \/>\n\u4ee5\u8bbe\u7f6econnect()\u5ef6\u65f6,\u76f4\u5230accpet()\u88ab\u547c\u53eb(\u672c\u51fd\u6570\u8bbe\u7f6e\u53ea\u6709\u5728\u975e\u963b\u585e\u7684\u8fc7\u7a0b\u4e2d\u6709\u663e\u8457\u7684<br \/>\n\u4f5c\u7528\uff0c\u5728\u963b\u585e\u7684\u51fd\u6570\u8c03\u7528\u4e2d\u4f5c\u7528\u4e0d\u5927)<br \/>\nBOOL bConditionalAccept=TRUE;<br \/>\nsetsockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const char*)&amp;bConditionalAccept,sizeof(BOOL));<br \/>\n9.\u5982\u679c\u5728\u53d1\u9001\u6570\u636e\u7684\u8fc7\u7a0b\u4e2d(send()\u6ca1\u6709\u5b8c\u6210\uff0c\u8fd8\u6709\u6570\u636e\u6ca1\u53d1\u9001)\u800c\u8c03\u7528\u4e86closesocket(),\u4ee5\u524d\u6211\u4eec<br \/>\n\u4e00\u822c\u91c7\u53d6\u7684\u63aa\u65bd\u662f&#8221;\u4ece\u5bb9\u5173\u95ed&#8221;shutdown(s,SD_BOTH),\u4f46\u662f\u6570\u636e\u662f\u80af\u5b9a\u4e22\u5931\u4e86\uff0c\u5982\u4f55\u8bbe\u7f6e\u8ba9\u7a0b\u5e8f\u6ee1\u8db3\u5177\u4f53<br \/>\n\u5e94\u7528\u7684\u8981\u6c42(\u5373\u8ba9\u6ca1\u53d1\u5b8c\u7684\u6570\u636e\u53d1\u9001\u51fa\u53bb\u540e\u5728\u5173\u95edsocket)\uff1f<br \/>\nstruct linger {<br \/>\nu_short l_onoff;<br \/>\nu_short l_linger;<br \/>\n};<br \/>\nlinger m_sLinger;<br \/>\nm_sLinger.l_onoff=1;\/\/(\u5728closesocket()\u8c03\u7528,\u4f46\u662f\u8fd8\u6709\u6570\u636e\u6ca1\u53d1\u9001\u5b8c\u6bd5\u7684\u65f6\u5019\u5bb9\u8bb8\u9017\u7559)<br \/>\n\/\/ \u5982\u679cm_sLinger.l_onoff=0;\u5219\u529f\u80fd\u548c2.)\u4f5c\u7528\u76f8\u540c;<br \/>\nm_sLinger.l_linger=5;\/\/(\u5bb9\u8bb8\u9017\u7559\u7684\u65f6\u95f4\u4e3a5\u79d2)<br \/>\nsetsockopt(s,SOL_SOCKET,SO_LINGER,(const char*)&amp;m_sLinger,sizeof(linger));<br \/>\nsetsockopt()\u7528\u6cd5<br \/>\n2007\/12\/05 19:01<br \/>\n\u4e00\u4e0b\u6765\u6e90\u4e8e\u4e92\u8054\u7f51\uff1a<\/p>\n<p>1.closesocket\uff08\u4e00\u822c\u4e0d\u4f1a\u7acb\u5373\u5173\u95ed\u800c\u7ecf\u5386TIME_WAIT\u7684\u8fc7\u7a0b\uff09\u540e\u60f3\u7ee7\u7eed\u91cd\u7528\u8be5socket\uff1a<br \/>\nBOOL bReuseaddr=TRUE;<br \/>\nsetsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&amp;bReuseaddr,sizeof(BOOL));<\/p>\n<p>2. \u5982\u679c\u8981\u5df2\u7ecf\u5904\u4e8e\u8fde\u63a5\u72b6\u6001\u7684soket\u5728\u8c03\u7528closesocket\u540e\u5f3a\u5236\u5173\u95ed\uff0c\u4e0d\u7ecf\u5386<br \/>\nTIME_WAIT\u7684\u8fc7\u7a0b\uff1a<br \/>\nBOOL bDontLinger = FALSE;<br \/>\nsetsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&amp;bDontLinger,sizeof(BOOL));<\/p>\n<p>3.\u5728send(),recv()\u8fc7\u7a0b\u4e2d\u6709\u65f6\u7531\u4e8e\u7f51\u7edc\u72b6\u51b5\u7b49\u539f\u56e0\uff0c\u53d1\u6536\u4e0d\u80fd\u9884\u671f\u8fdb\u884c,\u800c\u8bbe\u7f6e\u6536\u53d1\u65f6\u9650\uff1a<br \/>\nint nNetTimeout=1000;\/\/1\u79d2<br \/>\n\/\/\u53d1\u9001\u65f6\u9650<br \/>\nsetsockopt(socket\uff0cSOL_S0CKET,SO_SNDTIMEO\uff0c(char *)&amp;nNetTimeout,sizeof(int));<br \/>\n\/\/\u63a5\u6536\u65f6\u9650<br \/>\nsetsockopt(socket\uff0cSOL_S0CKET,SO_RCVTIMEO\uff0c(char *)&amp;nNetTimeout,sizeof(int));<\/p>\n<p>4.\u5728send()\u7684\u65f6\u5019\uff0c\u8fd4\u56de\u7684\u662f\u5b9e\u9645\u53d1\u9001\u51fa\u53bb\u7684\u5b57\u8282(\u540c\u6b65)\u6216\u53d1\u9001\u5230socket\u7f13\u51b2\u533a\u7684\u5b57\u8282<br \/>\n(\u5f02\u6b65);\u7cfb\u7edf\u9ed8\u8ba4\u7684\u72b6\u6001\u53d1\u9001\u548c\u63a5\u6536\u4e00\u6b21\u4e3a8688\u5b57\u8282(\u7ea6\u4e3a8.5K)\uff1b\u5728\u5b9e\u9645\u7684\u8fc7\u7a0b\u4e2d\u53d1\u9001\u6570\u636e<br \/>\n\u548c\u63a5\u6536\u6570\u636e\u91cf\u6bd4\u8f83\u5927\uff0c\u53ef\u4ee5\u8bbe\u7f6esocket\u7f13\u51b2\u533a\uff0c\u800c\u907f\u514d\u4e86send(),recv()\u4e0d\u65ad\u7684\u5faa\u73af\u6536\u53d1\uff1a<br \/>\n\/\/ \u63a5\u6536\u7f13\u51b2\u533a<br \/>\nint nRecvBuf=32*1024;\/\/\u8bbe\u7f6e\u4e3a32K<br \/>\nsetsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&amp;nRecvBuf,sizeof(int));<br \/>\n\/\/\u53d1\u9001\u7f13\u51b2\u533a<br \/>\nint nSendBuf=32*1024;\/\/\u8bbe\u7f6e\u4e3a32K<br \/>\nsetsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&amp;nSendBuf,sizeof(int));<br \/>\n5. \u5982\u679c\u5728\u53d1\u9001\u6570\u636e\u7684\u65f6\uff0c\u5e0c\u671b\u4e0d\u7ecf\u5386\u7531\u7cfb\u7edf\u7f13\u51b2\u533a\u5230socket\u7f13\u51b2\u533a\u7684\u62f7\u8d1d\u800c\u5f71\u54cd<br \/>\n\u7a0b\u5e8f\u7684\u6027\u80fd\uff1a<br \/>\nint nZero=0;<br \/>\nsetsockopt(socket\uff0cSOL_S0CKET,SO_SNDBUF\uff0c(char *)&amp;nZero,sizeof(nZero));<br \/>\n6.\u540c\u4e0a\u5728recv()\u5b8c\u6210\u4e0a\u8ff0\u529f\u80fd(\u9ed8\u8ba4\u60c5\u51b5\u662f\u5c06socket\u7f13\u51b2\u533a\u7684\u5185\u5bb9\u62f7\u8d1d\u5230\u7cfb\u7edf\u7f13\u51b2\u533a)\uff1a<br \/>\nint nZero=0;<br \/>\nsetsockopt(socket\uff0cSOL_S0CKET,SO_RCVBUF\uff0c(char *)&amp;nZero,sizeof(int));<br \/>\n7.\u4e00\u822c\u5728\u53d1\u9001UDP\u6570\u636e\u62a5\u7684\u65f6\u5019\uff0c\u5e0c\u671b\u8be5socket\u53d1\u9001\u7684\u6570\u636e\u5177\u6709\u5e7f\u64ad\u7279\u6027\uff1a<br \/>\nBOOL bBroadcast=TRUE;<br \/>\nsetsockopt(s,SOL_SOCKET,SO_BROADCAST,(const char*)&amp;bBroadcast,sizeof(BOOL));<br \/>\n8.\u5728client\u8fde\u63a5\u670d\u52a1\u5668\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u5904\u4e8e\u975e\u963b\u585e\u6a21\u5f0f\u4e0b\u7684socket\u5728connect()\u7684\u8fc7\u7a0b\u4e2d\u53ef<br \/>\n\u4ee5\u8bbe\u7f6econnect()\u5ef6\u65f6,\u76f4\u5230accpet()\u88ab\u547c\u53eb(\u672c\u51fd\u6570\u8bbe\u7f6e\u53ea\u6709\u5728\u975e\u963b\u585e\u7684\u8fc7\u7a0b\u4e2d\u6709\u663e\u8457\u7684<br \/>\n\u4f5c\u7528\uff0c\u5728\u963b\u585e\u7684\u51fd\u6570\u8c03\u7528\u4e2d\u4f5c\u7528\u4e0d\u5927)<br \/>\nBOOL bConditionalAccept=TRUE;<br \/>\nsetsockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const char*)&amp;bConditionalAccept,sizeof(BOOL));<br \/>\n9.\u5982\u679c\u5728\u53d1\u9001\u6570\u636e\u7684\u8fc7\u7a0b\u4e2d(send()\u6ca1\u6709\u5b8c\u6210\uff0c\u8fd8\u6709\u6570\u636e\u6ca1\u53d1\u9001)\u800c\u8c03\u7528\u4e86closesocket(),\u4ee5\u524d\u6211\u4eec<br \/>\n\u4e00\u822c\u91c7\u53d6\u7684\u63aa\u65bd\u662f&#8221;\u4ece\u5bb9\u5173\u95ed&#8221;shutdown(s,SD_BOTH),\u4f46\u662f\u6570\u636e\u662f\u80af\u5b9a\u4e22\u5931\u4e86\uff0c\u5982\u4f55\u8bbe\u7f6e\u8ba9\u7a0b\u5e8f\u6ee1\u8db3\u5177\u4f53<br \/>\n\u5e94\u7528\u7684\u8981\u6c42(\u5373\u8ba9\u6ca1\u53d1\u5b8c\u7684\u6570\u636e\u53d1\u9001\u51fa\u53bb\u540e\u5728\u5173\u95edsocket)\uff1f<br \/>\nstruct linger {<br \/>\nu_short l_onoff;<br \/>\nu_short l_linger;<br \/>\n};<br \/>\nlinger m_sLinger;<br \/>\nm_sLinger.l_onoff=1;\/\/(\u5728closesocket()\u8c03\u7528,\u4f46\u662f\u8fd8\u6709\u6570\u636e\u6ca1\u53d1\u9001\u5b8c\u6bd5\u7684\u65f6\u5019\u5bb9\u8bb8\u9017\u7559)<br \/>\n\/\/ \u5982\u679cm_sLinger.l_onoff=0;\u5219\u529f\u80fd\u548c2.)\u4f5c\u7528\u76f8\u540c;<br \/>\nm_sLinger.l_linger=5;\/\/(\u5bb9\u8bb8\u9017\u7559\u7684\u65f6\u95f4\u4e3a5\u79d2)<br \/>\nsetsockopt(s,SOL_SOCKET,SO_LINGER,(const char*)&amp;m_sLinger,sizeof(linger));<br \/>\n\u00a0<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>int setsockopt( SOCKET s, int level, int optname, const [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-808","post","type-post","status-publish","format-standard","hentry","category-linux-c"],"_links":{"self":[{"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/posts\/808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=808"}],"version-history":[{"count":1,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/posts\/808\/revisions"}],"predecessor-version":[{"id":809,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=\/wp\/v2\/posts\/808\/revisions\/809"}],"wp:attachment":[{"href":"https:\/\/www.kumouse.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=808"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kumouse.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}