<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>socket 相关</title><link>http://blog.vckbase.com/zaboli/category/366.html</link><description>socket 相关</description><managingEditor>玻璃小屋</managingEditor><dc:language>zh-CHS</dc:language><generator>.Text Version 0.958.2004.214</generator><item><dc:creator>玻璃小屋</dc:creator><title>完成端口(IOCP) 也可以这样用~~呵呵~ 用来充当线程之间的数据队列~</title><link>http://blog.vckbase.com/zaboli/archive/2008/04/30/33472.html</link><pubDate>Wed, 30 Apr 2008 02:42:00 GMT</pubDate><guid>http://blog.vckbase.com/zaboli/archive/2008/04/30/33472.html</guid><wfw:comment>http://blog.vckbase.com/zaboli/comments/33472.html</wfw:comment><comments>http://blog.vckbase.com/zaboli/archive/2008/04/30/33472.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.vckbase.com/zaboli/comments/commentRss/33472.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/zaboli/services/trackbacks/33472.html</trackback:ping><description>&lt;P&gt;完成端口貌似就是用 PostQueuedCompletionStatus/&lt;STRONG&gt;GetQueuedCompletionStatus 来管理一个事件队列的~ 即使没有 文件和Socket IO，我们单单用他来管理 线程之间的数据传递，貌似也很好用啊。。。。 ;p&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"&gt;
&lt;DIV&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;Test32.cpp&amp;nbsp;:&amp;nbsp;定义控制台应用程序的入口点。&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;stdafx.h&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;stdlib.h&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;windows.h&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;process.h&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;iostream&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;HANDLE&amp;nbsp;m_hCompletionPort;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;volatile&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;BOOL&amp;nbsp;m_bShutDown;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;struct&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;TESTOVERLAPPED&lt;BR&gt;&lt;IMG id=Codehighlighter1_216_256_Open_Image onclick="this.style.display='none'; Codehighlighter1_216_256_Open_Text.style.display='none'; Codehighlighter1_216_256_Closed_Image.style.display='inline'; Codehighlighter1_216_256_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_216_256_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_216_256_Closed_Text.style.display='none'; Codehighlighter1_216_256_Open_Image.style.display='inline'; Codehighlighter1_216_256_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_216_256_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_216_256_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OVERLAPPED&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_ol;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CHAR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;szData[&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;512&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;];&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;UINT&amp;nbsp;WINAPI&amp;nbsp;IOWorkerThreadProc(LPVOID&amp;nbsp;pParam)&lt;BR&gt;&lt;IMG id=Codehighlighter1_307_1472_Open_Image onclick="this.style.display='none'; Codehighlighter1_307_1472_Open_Text.style.display='none'; Codehighlighter1_307_1472_Closed_Image.style.display='inline'; Codehighlighter1_307_1472_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_307_1472_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_307_1472_Closed_Text.style.display='none'; Codehighlighter1_307_1472_Open_Image.style.display='inline'; Codehighlighter1_307_1472_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_307_1472_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_307_1472_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bError&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;FALSE;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWORD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dwIoSize&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWORD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dwCmpKey&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LPOVERLAPPED&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpOverlapped&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;NULL;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TESTOVERLAPPED&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pOverlapBuff&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;NULL;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;while&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;!&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;bError&amp;nbsp;)&lt;BR&gt;&lt;IMG id=Codehighlighter1_478_1426_Open_Image onclick="this.style.display='none'; Codehighlighter1_478_1426_Open_Text.style.display='none'; Codehighlighter1_478_1426_Closed_Image.style.display='inline'; Codehighlighter1_478_1426_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_478_1426_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_478_1426_Closed_Text.style.display='none'; Codehighlighter1_478_1426_Open_Image.style.display='inline'; Codehighlighter1_478_1426_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_478_1426_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_478_1426_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pOverlapBuff&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;NULL;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dwCmpKey&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;Get&amp;nbsp;a&amp;nbsp;completed&amp;nbsp;IO&amp;nbsp;request.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOL&amp;nbsp;bIORet&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;GetQueuedCompletionStatus(m_hCompletionPort,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;dwIoSize,&amp;nbsp;(LPDWORD)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;dwCmpKey,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;lpOverlapped,&amp;nbsp;INFINITE);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;Simulate&amp;nbsp;workload&amp;nbsp;(for&amp;nbsp;debugging,&amp;nbsp;to&amp;nbsp;find&amp;nbsp;possible&amp;nbsp;reordering)&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;Sleep(20);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;If&amp;nbsp;Something&amp;nbsp;whent&amp;nbsp;wrong..&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;!&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;bIORet)&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;IMG id=Codehighlighter1_808_972_Open_Image onclick="this.style.display='none'; Codehighlighter1_808_972_Open_Text.style.display='none'; Codehighlighter1_808_972_Closed_Image.style.display='inline'; Codehighlighter1_808_972_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_808_972_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_808_972_Closed_Text.style.display='none'; Codehighlighter1_808_972_Open_Image.style.display='inline'; Codehighlighter1_808_972_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_808_972_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_808_972_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWORD&amp;nbsp;dwIOError&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;GetLastError();&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(dwIOError&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;!=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;WAIT_TIMEOUT)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;It&amp;nbsp;was&amp;nbsp;not&amp;nbsp;an&amp;nbsp;Time&amp;nbsp;out&amp;nbsp;event&amp;nbsp;we&amp;nbsp;wait&amp;nbsp;for&amp;nbsp;ever&amp;nbsp;(INFINITE)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG id=Codehighlighter1_944_968_Open_Image onclick="this.style.display='none'; Codehighlighter1_944_968_Open_Text.style.display='none'; Codehighlighter1_944_968_Closed_Image.style.display='inline'; Codehighlighter1_944_968_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_944_968_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_944_968_Closed_Text.style.display='none'; Codehighlighter1_944_968_Open_Image.style.display='inline'; Codehighlighter1_944_968_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_944_968_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_944_968_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;continue&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;if&amp;nbsp;(!bIORet)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(bIORet&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;lpOverlapped&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;dwCmpKey)&amp;nbsp;&lt;BR&gt;&lt;IMG id=Codehighlighter1_1037_1329_Open_Image onclick="this.style.display='none'; Codehighlighter1_1037_1329_Open_Text.style.display='none'; Codehighlighter1_1037_1329_Closed_Image.style.display='inline'; Codehighlighter1_1037_1329_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_1037_1329_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1037_1329_Closed_Text.style.display='none'; Codehighlighter1_1037_1329_Open_Image.style.display='inline'; Codehighlighter1_1037_1329_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1037_1329_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1037_1329_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pOverlapBuff&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;CONTAINING_RECORD(lpOverlapped,&amp;nbsp;TESTOVERLAPPED,&amp;nbsp;m_ol);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(pOverlapBuff&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;!=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;NULL)&lt;BR&gt;&lt;IMG id=Codehighlighter1_1139_1300_Open_Image onclick="this.style.display='none'; Codehighlighter1_1139_1300_Open_Text.style.display='none'; Codehighlighter1_1139_1300_Closed_Image.style.display='inline'; Codehighlighter1_1139_1300_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_1139_1300_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1139_1300_Closed_Text.style.display='none'; Codehighlighter1_1139_1300_Open_Image.style.display='inline'; Codehighlighter1_1139_1300_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1139_1300_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1139_1300_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;pThis-&amp;gt;ProcessIOMessage(pOverlapBuff,&amp;nbsp;dwCmpKey,&amp;nbsp;dwIoSize);&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;ThreaId：0x%x %d %s &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,GetCurrentThreadId(),dwCmpKey,pOverlapBuff&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;szData);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete&amp;nbsp;pOverlapBuff;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;((dwCmpKey&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;==&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;NULL)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(pOverlapBuff&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;==&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;NULL)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;m_bShutDown)&lt;BR&gt;&lt;IMG id=Codehighlighter1_1401_1423_Open_Image onclick="this.style.display='none'; Codehighlighter1_1401_1423_Open_Text.style.display='none'; Codehighlighter1_1401_1423_Closed_Image.style.display='inline'; Codehighlighter1_1401_1423_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_1401_1423_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1401_1423_Closed_Text.style.display='none'; Codehighlighter1_1401_1423_Open_Image.style.display='inline'; Codehighlighter1_1401_1423_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1401_1423_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1401_1423_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bError&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;TRUE;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Thread&amp;nbsp;dead!&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xdead&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;_tmain(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;argc,&amp;nbsp;_TCHAR&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;argv[])&lt;BR&gt;&lt;IMG id=Codehighlighter1_1515_2234_Open_Image onclick="this.style.display='none'; Codehighlighter1_1515_2234_Open_Text.style.display='none'; Codehighlighter1_1515_2234_Closed_Image.style.display='inline'; Codehighlighter1_1515_2234_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_1515_2234_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1515_2234_Closed_Text.style.display='none'; Codehighlighter1_1515_2234_Open_Image.style.display='inline'; Codehighlighter1_1515_2234_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1515_2234_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1515_2234_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_hCompletionPort&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CreateIoCompletionPort(&amp;nbsp;INVALID_HANDLE_VALUE,&amp;nbsp;NULL,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uintptr_t&amp;nbsp;hThread&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;_beginthreadex(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,IOWorkerThreadProc,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&amp;nbsp;NULL);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hThread&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;_beginthreadex(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,IOWorkerThreadProc,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&amp;nbsp;NULL);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hThread&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;_beginthreadex(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,IOWorkerThreadProc,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&amp;nbsp;NULL);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_bShutDown&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;FALSE;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;for&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;i&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&amp;nbsp;i&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;30&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&amp;nbsp;i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;++&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;BR&gt;&lt;IMG id=Codehighlighter1_1846_2131_Open_Image onclick="this.style.display='none'; Codehighlighter1_1846_2131_Open_Text.style.display='none'; Codehighlighter1_1846_2131_Closed_Image.style.display='inline'; Codehighlighter1_1846_2131_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_1846_2131_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1846_2131_Closed_Text.style.display='none'; Codehighlighter1_1846_2131_Open_Image.style.display='inline'; Codehighlighter1_1846_2131_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1846_2131_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1846_2131_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWORD&amp;nbsp;dwCmpKey&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;i;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TESTOVERLAPPED&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;pOverlapBuff&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;TESTOVERLAPPED;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memset(pOverlapBuff&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;szData,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;sizeof&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(pOverlapBuff&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;szData));&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sprintf(pOverlapBuff&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;szData,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;CMD&amp;nbsp;ID：%d&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,i);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PostQueuedCompletionStatus(m_hCompletionPort,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&amp;nbsp;(ULONG_PTR)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;dwCmpKey,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;pOverlapBuff&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;m_ol);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_bShutDown&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;TRUE;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PostQueuedCompletionStatus(m_hCompletionPort,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;getchar();&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;输出：&lt;BR&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"&gt;
&lt;DIV&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #000000"&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0x890&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0x890&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;3&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xc90&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xc90&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;6&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xc90&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;7&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xc90&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;8&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xc90&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;9&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xc90&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;10&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xc90&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;11&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;5&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;13&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;14&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;15&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;16&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;17&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;19&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;20&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;21&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;22&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;23&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0x890&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;4&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xc90&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;12&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;24&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;27&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xc90&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;26&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0x890&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;25&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xa18&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;28&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;ThreaId：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0xc90&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1310516&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CMD&amp;nbsp;ID：&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;29&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;Thread&amp;nbsp;dead&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;!&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/STRONG&gt;&lt;img src ="http://blog.vckbase.com/zaboli/aggbug/33472.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>玻璃小屋</dc:creator><title>Windows 下面的IOCP有关的数据包 分包、拆包机制。</title><link>http://blog.vckbase.com/zaboli/archive/2008/03/14/32932.html</link><pubDate>Fri, 14 Mar 2008 07:31:00 GMT</pubDate><guid>http://blog.vckbase.com/zaboli/archive/2008/03/14/32932.html</guid><wfw:comment>http://blog.vckbase.com/zaboli/comments/32932.html</wfw:comment><comments>http://blog.vckbase.com/zaboli/archive/2008/03/14/32932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/zaboli/comments/commentRss/32932.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/zaboli/services/trackbacks/32932.html</trackback:ping><description>&lt;BR&gt;1、IOCP 在异步投递数据的时候，是把数据缓冲区锁定的，就是在你投递之后，在它实际通过网络发送之前，你投递了多大的缓冲区，他就锁定多大。&lt;BR&gt;2、通常在写socket 连接很多的服务端程序的时候，我们都期望把内存分配机制写成内存池的方式，就是避免频繁的从系统中申请和释放内存，据说这样会增加内存碎片。&lt;BR&gt;3、通常我们每次发送的不同用途的实际数据包的大小都不是固定的。&lt;BR&gt;&lt;BR&gt;由于以上几点，就决定了以下事实：&lt;BR&gt;&lt;BR&gt;写内存池时，一般情况下都是固定大小的内存块。如果按程序中 最大的实际数据包的大小来规定内存池每个内存块的大小。当发送数据包时，会造成IOCP锁定数据包，浪费内存。比如 struct SendData 大小是 2048 bytes，struct LogData 大小是 256 bytes。这时如果按 2048bytes 当内存池中内存块的大小，那么 我每分配一个 LogData 也将占用&amp;nbsp;&amp;nbsp;2048 bytes 。这无疑是很大的浪费。所以为了避免浪费或减少浪费，我们可以定义内存池中的内存块的大小为 512 bytes，这时N bytes (n &amp;gt; 512) 大小的数据包，需要分成 n/512 个包 来发送。&lt;BR&gt;&lt;BR&gt;这样，对于 TCP 数据流来说，我们在发送时 需要把自己的实际数据包 先分解成 每 512 bytes 大小的 二级分包，然后再一包一包的发送。&lt;BR&gt;在接收时，我们需要从TCP数据流中 先拆分出 二级分包。然后再从二级分包中组合出我们的实际数据包。&lt;BR&gt;&lt;BR&gt;&lt;img src ="http://blog.vckbase.com/zaboli/aggbug/32932.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>玻璃小屋</dc:creator><title>老外好人多~~ hook winsocket 的开原代码~~</title><link>http://blog.vckbase.com/zaboli/archive/2007/01/30/24339.html</link><pubDate>Tue, 30 Jan 2007 03:21:00 GMT</pubDate><guid>http://blog.vckbase.com/zaboli/archive/2007/01/30/24339.html</guid><wfw:comment>http://blog.vckbase.com/zaboli/comments/24339.html</wfw:comment><comments>http://blog.vckbase.com/zaboli/archive/2007/01/30/24339.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/zaboli/comments/commentRss/24339.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/zaboli/services/trackbacks/24339.html</trackback:ping><description>&lt;BR&gt;&lt;A href="http://www.viksoe.dk/code/wepmetering.htm"&gt;http://www.viksoe.dk/code/wepmetering.htm&lt;/A&gt;&lt;img src ="http://blog.vckbase.com/zaboli/aggbug/24339.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>玻璃小屋</dc:creator><title>detours   IAT  SPI 记几个关键字。</title><link>http://blog.vckbase.com/zaboli/archive/2007/01/25/24228.html</link><pubDate>Thu, 25 Jan 2007 15:52:00 GMT</pubDate><guid>http://blog.vckbase.com/zaboli/archive/2007/01/25/24228.html</guid><wfw:comment>http://blog.vckbase.com/zaboli/comments/24228.html</wfw:comment><comments>http://blog.vckbase.com/zaboli/archive/2007/01/25/24228.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blog.vckbase.com/zaboli/comments/commentRss/24228.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/zaboli/services/trackbacks/24228.html</trackback:ping><description>关于拦截、修改 socket 数据的。&lt;BR&gt;呵呵，以后随笔不要写了。。。记住开发中要用的技术的关键字，然后 baidu就可以了&lt;img src ="http://blog.vckbase.com/zaboli/aggbug/24228.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>玻璃小屋</dc:creator><title>重叠模型的UDP(转自http://community.csdn.net/Expert/TopicView3.asp?id=4984210)</title><link>http://blog.vckbase.com/zaboli/archive/2006/11/19/23157.html</link><pubDate>Sun, 19 Nov 2006 02:04:00 GMT</pubDate><guid>http://blog.vckbase.com/zaboli/archive/2006/11/19/23157.html</guid><wfw:comment>http://blog.vckbase.com/zaboli/comments/23157.html</wfw:comment><comments>http://blog.vckbase.com/zaboli/archive/2006/11/19/23157.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.vckbase.com/zaboli/comments/commentRss/23157.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/zaboli/services/trackbacks/23157.html</trackback:ping><description>&lt;TABLE cellSpacing=0 cellPadding=0 width=580 border=0&gt;
&lt;TBODY&gt;
&lt;TR class=color1 height=25&gt;
&lt;TD width=20&gt;&lt;/TD&gt;
&lt;TD width=360&gt;&lt;FONT color=#3366cc&gt;回复人：&lt;B&gt;&lt;A href="http://message.csdn.net/SendMessage.aspx?To=f_acme" target=_blank&gt;&lt;FONT color=#3366cc&gt;f_acme(沧海一声笑) &lt;/FONT&gt;&lt;/A&gt;&lt;/B&gt;&lt;FONT color=#000000&gt;( &lt;IMG title=一级(初级) alt=一级(初级) src="http://community.csdn.net/expert/images/rank/user1.gif"&gt;) 信誉：100&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD width=120&gt;&lt;FONT color=#000000&gt;2006-9-2 11:48:13&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD width=80&gt;&lt;FONT color=#000000&gt;得分:&lt;/FONT&gt;&lt;FONT color=#000000&gt;0&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD bgColor=#0066cc colSpan=4 height=1&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD colSpan=4 height=5&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT color=#ffffff&gt;?&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD colSpan=3&gt;
&lt;TABLE style="TABLE-LAYOUT: fixed" cellPadding=3 width=580&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;DIV style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"&gt;&lt;BR&gt;我用重叠模型写的UDP服务器，也是用于音视频传输的，不过我的这是服务器方面的，不是客户端的，贴出来给大家参考下，觉得有点不好，各位顺便提下意见：&lt;BR&gt;&lt;BR&gt;DWORD WINAPI Server::CreateRecvUDPThread(LPVOID lpParam)&lt;BR&gt;{&lt;BR&gt;Server* lp_this = (Server*)lpParam;&lt;BR&gt;&lt;BR&gt;lp_this-&amp;gt;m_udpFront = 0;&lt;BR&gt;lp_this-&amp;gt;m_udpTail = 0;&lt;BR&gt;memset(&amp;amp;lp_this-&amp;gt;m_udpDataQueue, 0, sizeof(UDPData)*UDPQUEUELEN);&lt;BR&gt;DWORD id;&lt;BR&gt;//UDPThread为处理UDP数据线程，我用的是一个接收数据线程，一个处理线程，此为接收线程&lt;BR&gt;::CreateThread(NULL, 0, UDPThread, lp_this, 0, &amp;amp;id);&lt;BR&gt;&lt;BR&gt;WSAOVERLAPPED ol;&lt;BR&gt;WSAEVENT hEvent[10];&lt;BR&gt;WSABUF wsaBuf;&lt;BR&gt;DWORD nRecv = 0;&lt;BR&gt;DWORD bFlag = 0;&lt;BR&gt;DWORD dwTrans = 0;&lt;BR&gt;DWORD nRet = 0;&lt;BR&gt;&lt;BR&gt;int count = 0;&lt;BR&gt;int index;&lt;BR&gt;char buf[BUFFER_SIZE] = {'\0'};&lt;BR&gt;&lt;BR&gt;SOCKADDR_IN from;&lt;BR&gt;int fromLen = sizeof(SOCKADDR_IN);&lt;BR&gt;&lt;BR&gt;hEvent[0] = WSACreateEvent();&lt;BR&gt;wsaBuf.buf = buf;&lt;BR&gt;wsaBuf.len = BUFFER_SIZE;&lt;BR&gt;memset(&amp;amp;ol, 0, sizeof(WSAOVERLAPPED));&lt;BR&gt;ol.hEvent = hEvent[0];&lt;BR&gt;&lt;BR&gt;//循环接受UDP数据包&lt;BR&gt;while(true)&lt;BR&gt;{&lt;BR&gt;nRet = WSARecvFrom(lp_this-&amp;gt;m_udpsock, &amp;amp;wsaBuf, 1, &amp;amp;nRecv, &amp;amp;bFlag, (sockaddr*)&amp;amp;from, &amp;amp;fromLen, &amp;amp;ol, NULL);&lt;BR&gt;if (nRet ==SOCKET_ERROR) &lt;BR&gt;{ &lt;BR&gt;if (WSAGetLastError() != WSA_IO_PENDING) &lt;BR&gt;{&lt;BR&gt;lp_this-&amp;gt;Error("wsarecv error!");&lt;BR&gt;return 0;&lt;BR&gt;}&lt;BR&gt;index = WSAWaitForMultipleEvents(1, hEvent, FALSE, WSA_INFINITE, FALSE);&lt;BR&gt;index -= WSA_WAIT_EVENT_0;&lt;BR&gt;WSAResetEvent(hEvent[index]);&lt;BR&gt;switch(index)&lt;BR&gt;{&lt;BR&gt;case 0:&lt;BR&gt;{&lt;BR&gt;WSAGetOverlappedResult(lp_this-&amp;gt;m_udpsock, &amp;amp;ol, &amp;amp;dwTrans, FALSE, &amp;amp;bFlag);&lt;BR&gt;if(dwTrans == 0)&lt;BR&gt;{&lt;BR&gt;lp_this-&amp;gt;Error("WSAGetOverlappedResult error!");&lt;BR&gt;//WSACloseEvent(hEvent[index]);&lt;BR&gt;//return 0;&lt;BR&gt;continue;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;//拷贝接收到的数据到缓冲队列中，用于处理线程进行处理&lt;BR&gt;lp_this-&amp;gt;m_udpTail = (lp_this-&amp;gt;m_udpTail + 1) % UDPQUEUELEN;&lt;BR&gt;lp_this-&amp;gt;m_udpDataQueue[lp_this-&amp;gt;m_udpTail].len = dwTrans;&lt;BR&gt;memcpy(lp_this-&amp;gt;m_udpDataQueue[lp_this-&amp;gt;m_udpTail].buff, wsaBuf.buf, dwTrans);&lt;BR&gt;memcpy((char*)&amp;amp;lp_this-&amp;gt;m_udpDataQueue[lp_this-&amp;gt;m_udpTail].from, (char*)&amp;amp;from, sizeof(from));&lt;BR&gt;//通知处理线程有数据&lt;BR&gt;::PostThreadMessage(id, WM_UDPDATA, NULL, NULL);&lt;BR&gt;&lt;BR&gt;wsaBuf.buf = buf;&lt;BR&gt;wsaBuf.len = BUFFER_SIZE;&lt;BR&gt;}&lt;BR&gt;break;&lt;BR&gt;default:&lt;BR&gt;lp_this-&amp;gt;Error("default error!");&lt;BR&gt;break;&lt;BR&gt;}&lt;BR&gt;}&lt;BR&gt;}&lt;BR&gt;return 0;&lt;BR&gt;}&lt;BR&gt;&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;A href="http://community.csdn.net/Expert/TopicView3.asp?id=4984210"&gt;http://community.csdn.net/Expert/TopicView3.asp?id=4984210&lt;/A&gt;&lt;img src ="http://blog.vckbase.com/zaboli/aggbug/23157.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>玻璃小屋</dc:creator><title>关于MFC的CSocket和CAsyncSocket封装的一个大误解！</title><link>http://blog.vckbase.com/zaboli/archive/2006/10/23/22843.html</link><pubDate>Mon, 23 Oct 2006 05:51:00 GMT</pubDate><guid>http://blog.vckbase.com/zaboli/archive/2006/10/23/22843.html</guid><wfw:comment>http://blog.vckbase.com/zaboli/comments/22843.html</wfw:comment><comments>http://blog.vckbase.com/zaboli/archive/2006/10/23/22843.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://blog.vckbase.com/zaboli/comments/commentRss/22843.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/zaboli/services/trackbacks/22843.html</trackback:ping><description>&lt;P&gt;说实话！开始用CSocket和 CAsyncSocket的时候觉的很好用。都是用来写客户端的嘛！比如 ftp啦，什么的。都是单线程的。&lt;BR&gt;可是后来做的多了，听的多了。似乎大家都对CSocket和CAsyncSocket斥之以鼻！后来要写服务器方面的程序了连接多了，线程模式也是多线程了。查了很多资料，都说这两个封装的效率很低。似乎是每创建一个CSocket对象，都会创建一个窗口。这样的话，如果写服务器程序，几百几千个socket的话，就有几百几千的windows了。。。那就晕了。。。。。&lt;BR&gt;&lt;BR&gt;直到某一天有了如下我老人家自以为是，最后砸了自己的脚的对话：&lt;BR&gt;&lt;BR&gt;2006-10-23 12:39:26 周伯通&lt;BR&gt;CAsyncSocket的OnSend,OnSend等会重入吗？ &lt;/P&gt;
&lt;P&gt;2006-10-23 12:40:36 周伯通&lt;BR&gt;[:D] &lt;/P&gt;
&lt;P&gt;2006-10-23 12:41:17 ㊣毛毛&lt;BR&gt;啥叫重入？？包的顺序混乱？ &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;2006-10-23 12:41:30 ㊣毛毛&lt;BR&gt;写服务端？还是客户端？ &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;2006-10-23 12:42:19 周伯通&lt;BR&gt;就是一个OnReceive没结束，令一个OnReceive又开始了 &lt;/P&gt;
&lt;P&gt;2006-10-23 12:42:32 周伯通&lt;BR&gt;老大，你连这个都不懂？ &lt;/P&gt;
&lt;P&gt;2006-10-23 12:42:41 周伯通&lt;BR&gt;我今天眼花了？ &lt;/P&gt;
&lt;P&gt;2006-10-23 12:43:45 ㊣毛毛&lt;BR&gt;他是基于消息的。 &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;2006-10-23 12:44:23 周伯通&lt;BR&gt;进不进对列？ &lt;/P&gt;
&lt;P&gt;2006-10-23 12:45:05 ㊣毛毛&lt;BR&gt;[:L] &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;2006-10-23 12:45:20 周伯通&lt;BR&gt;[:D] &lt;/P&gt;
&lt;P&gt;2006-10-23 12:45:35 周伯通&lt;BR&gt;你是汉正街的水货 &lt;/P&gt;
&lt;P&gt;2006-10-23 12:45:53 ㊣毛毛&lt;BR&gt;每个CAsyncSocket都有一个窗口。 &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;2006-10-23 12:46:08 周伯通&lt;BR&gt;你是汉正街的水货 &lt;BR&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2006-10-23 12:46:28 ㊣毛毛&lt;BR&gt;当有数据的时候，socket 会发消息给这个窗口。 &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;2006-10-23 12:47:01 周伯通&lt;BR&gt;每个调用了AfxSockInit的线程都只有一个窗口！ &lt;/P&gt;
&lt;P&gt;2006-10-23 12:47:23 周伯通&lt;BR&gt;五年前我最喜欢哪这个问题考别人 &lt;/P&gt;
&lt;P&gt;2006-10-23 12:47:35 ㊣毛毛&lt;BR&gt;我真晕。。。 &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;2006-10-23 12:47:40 周伯通&lt;BR&gt;[:D] &lt;/P&gt;
&lt;P&gt;2006-10-23 12:48:31 周伯通&lt;BR&gt;1000个连接要是有1000个隐藏窗口，硬件厂商就高兴了 &lt;/P&gt;
&lt;P&gt;2006-10-23 12:48:36 周伯通&lt;BR&gt;[:D] &lt;/P&gt;
&lt;P&gt;2006-10-23 12:49:51 周伯通&lt;BR&gt;你是开发人员？还是冒牌的？ &lt;/P&gt;
&lt;P&gt;2006-10-23 12:49:55 周伯通&lt;BR&gt;[:D] &lt;/P&gt;
&lt;P&gt;2006-10-23 12:50:04 ㊣毛毛&lt;BR&gt;唉。 &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;2006-10-23 12:50:41 周伯通&lt;BR&gt;[:P] &lt;/P&gt;
&lt;P&gt;2006-10-23 12:52:03 周伯通&lt;BR&gt;别生气，开个玩笑 &lt;/P&gt;
&lt;P&gt;2006-10-23 12:54:06 周伯通&lt;BR&gt;{5CBB6 &lt;/P&gt;
&lt;P&gt;2006-10-23 13:02:55 周伯通&lt;BR&gt;伤心了？ &lt;/P&gt;
&lt;P&gt;2006-10-23 13:03:00 周伯通&lt;BR&gt;自卑了？ &lt;/P&gt;
&lt;P&gt;2006-10-23 13:08:06 周伯通&lt;BR&gt;I am sorry! &lt;/P&gt;
&lt;P&gt;2006-10-23 13:09:33 ㊣毛毛&lt;BR&gt;刚刚查了半天代码。。应该是每个线程一个窗口！ &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;2006-10-23 13:09:49 ㊣毛毛&lt;BR&gt;每个有 CSocket的线程！ &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;2006-10-23 13:10:01 周伯通&lt;BR&gt;也不一定 &lt;/P&gt;
&lt;P&gt;2006-10-23 13:10:09 ㊣毛毛&lt;BR&gt;应该是的。 &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;2006-10-23 13:10:29 周伯通&lt;BR&gt;关键是看该线程是否调用AfxSockInit &lt;/P&gt;
&lt;P&gt;2006-10-23 13:11:03 ㊣毛毛&lt;BR&gt;。。。不调用根本就不能用 socket 函数 -.- &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;2006-10-23 13:11:26 周伯通&lt;BR&gt;取决与AfxSockInit创建的一个数据结构，就是那个我特烦的模块线程状态 &lt;/P&gt;
&lt;P&gt;2006-10-23 13:11:54 周伯通&lt;BR&gt;因为有人可能只在主线程中Call sockInit &lt;/P&gt;
&lt;P&gt;2006-10-23 13:13:43 周伯通&lt;BR&gt;我不知道这样做现在还可不可以！！ &lt;/P&gt;
&lt;P&gt;2006-10-23 13:14:02 周伯通&lt;BR&gt;Long Long ago是可以的 &lt;/P&gt;
&lt;P&gt;2006-10-23 13:16:31 ㊣毛毛&lt;BR&gt;按他的模式，是每个线程都有一个 socket wnd.. &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;2006-10-23 13:16:58 周伯通&lt;BR&gt;对 &lt;/P&gt;
&lt;P&gt;2006-10-23 13:17:08 周伯通&lt;BR&gt;但他又。。 &lt;/P&gt;
&lt;P&gt;2006-10-23 13:17:17 周伯通&lt;BR&gt;唉 &lt;/P&gt;
&lt;P&gt;2006-10-23 13:17:26 周伯通&lt;BR&gt;不清不白 &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;。。。所以结论应该是：不是创建一个新的CSocket对象就要创建一个新的窗口。而是同一个线程里面的 CSocket对象共享一个m_hSocketWindow。所以这样看来，我以前的每个CSocket一个窗口的想法就错了，所以按此想法推理的CSocket写服务器程序效率的结论似乎也占不住脚！CSocket应该还是不错的封装！效率差在什么地方？？差在低层消息循环的开销？可是其他模型在实际工程中的同步什么的开销也应该不少吧？？请路过的老鸟指教？？&lt;BR&gt;&lt;BR&gt;另外 线程数据的结构如下，摘自afxstat_.h&lt;BR&gt;&lt;BR&gt;// AFX_MODULE_THREAD_STATE (local to thread *and* module)&lt;BR&gt;class AFX_MODULE_THREAD_STATE : public CNoTrackObject&lt;BR&gt;{&lt;BR&gt;public:&lt;BR&gt;&amp;nbsp;AFX_MODULE_THREAD_STATE();&lt;BR&gt;&amp;nbsp;virtual ~AFX_MODULE_THREAD_STATE();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;// current CWinThread pointer&lt;BR&gt;&amp;nbsp;CWinThread* m_pCurrentWinThread;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;// list of CFrameWnd objects for thread&lt;BR&gt;&amp;nbsp;CTypedSimpleList&amp;lt;CFrameWnd*&amp;gt; m_frameList;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;// temporary/permanent map state&lt;BR&gt;&amp;nbsp;DWORD m_nTempMapLock;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // if not 0, temp maps locked&lt;BR&gt;&amp;nbsp;CHandleMap* m_pmapHWND;&lt;BR&gt;&amp;nbsp;CHandleMap* m_pmapHMENU;&lt;BR&gt;&amp;nbsp;CHandleMap* m_pmapHDC;&lt;BR&gt;&amp;nbsp;CHandleMap* m_pmapHGDIOBJ;&lt;BR&gt;&amp;nbsp;CHandleMap* m_pmapHIMAGELIST;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;// thread-local MFC new handler (separate from C-runtime)&lt;BR&gt;&amp;nbsp;_PNH m_pfnNewHandler;&lt;/P&gt;
&lt;P&gt;#ifndef _AFX_NO_SOCKET_SUPPORT&lt;BR&gt;&amp;nbsp;// WinSock specific thread state&lt;BR&gt;&amp;nbsp;HWND m_hSocketWindow;&lt;BR&gt;#ifdef _AFXDLL&lt;BR&gt;&amp;nbsp;CEmbeddedButActsLikePtr&amp;lt;CMapPtrToPtr&amp;gt; m_pmapSocketHandle;&lt;BR&gt;&amp;nbsp;CEmbeddedButActsLikePtr&amp;lt;CMapPtrToPtr&amp;gt; m_pmapDeadSockets;&lt;BR&gt;&amp;nbsp;CEmbeddedButActsLikePtr&amp;lt;CPtrList&amp;gt; m_plistSocketNotifications;&lt;BR&gt;#else&lt;BR&gt;&amp;nbsp;CMapPtrToPtr* m_pmapSocketHandle;&lt;BR&gt;&amp;nbsp;CMapPtrToPtr* m_pmapDeadSockets;&lt;BR&gt;&amp;nbsp;CPtrList* m_plistSocketNotifications;&lt;BR&gt;#endif&lt;BR&gt;#endif&lt;/P&gt;
&lt;P&gt;&amp;nbsp;// common controls thread state&lt;BR&gt;&amp;nbsp;CToolTipCtrl* m_pToolTip;&lt;BR&gt;&amp;nbsp;CWnd* m_pLastHit;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // last window to own tooltip&lt;BR&gt;&amp;nbsp;INT_PTR m_nLastHit;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // last hittest code&lt;BR&gt;&amp;nbsp;TOOLINFO* m_pLastInfo;&amp;nbsp;&amp;nbsp;&amp;nbsp; // last TOOLINFO structure&lt;BR&gt;&amp;nbsp;INT_PTR m_nLastStatus;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // last flyby status message&lt;BR&gt;&amp;nbsp;CControlBar* m_pLastStatus; // last flyby status control bar&lt;BR&gt;};&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/zaboli/aggbug/22843.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>玻璃小屋</dc:creator><title>(zt) Socket 的 Send Recv 的长度问题?</title><link>http://blog.vckbase.com/zaboli/archive/2006/01/19/17157.html</link><pubDate>Thu, 19 Jan 2006 05:38:00 GMT</pubDate><guid>http://blog.vckbase.com/zaboli/archive/2006/01/19/17157.html</guid><wfw:comment>http://blog.vckbase.com/zaboli/comments/17157.html</wfw:comment><comments>http://blog.vckbase.com/zaboli/archive/2006/01/19/17157.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://blog.vckbase.com/zaboli/comments/commentRss/17157.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/zaboli/services/trackbacks/17157.html</trackback:ping><description>一个包没有固定长度，以太网限制在46－1500字节，1500就是以太网的MT&lt;BR&gt;&lt;BR&gt;U，超过这个量，TCP会为IP数据报设置偏移量进行分片传输，现在一般可&lt;BR&gt;&lt;BR&gt;允许应用层设置8k（NTFS系统）的缓冲区，8k的数据由底层分片，而应用&lt;BR&gt;&lt;BR&gt;层看来只是一次发送。&lt;BR&gt;&lt;BR&gt;windows的缓冲区经验值是4k&lt;BR&gt;&lt;BR&gt;Socket本身分为两种，流(TCP)和数据报(UDP)，你的问题针对这两种不同&lt;BR&gt;&lt;BR&gt;使用而结论不一样。甚至还和你是用阻塞、还是非阻塞Socket来编程有关&lt;BR&gt;&lt;BR&gt;。&lt;BR&gt;1、通信长度，这个是你自己决定的，没有系统强迫你要发多大的包，实&lt;BR&gt;&lt;BR&gt;际应该根据需求和网络状况来决定。对于TCP，这个长度可以大点，但要&lt;BR&gt;&lt;BR&gt;知道，Socket内部默认的收发缓冲区大小大概是8K，你可以用SetSockOpt&lt;BR&gt;&lt;BR&gt;来改变。但对于UDP，就不要太大，一般在1024至10K。注意一点，你无论&lt;BR&gt;&lt;BR&gt;发多大的包，IP层和链路层都会把你的包进行分片发送，一般局域网就是&lt;BR&gt;&lt;BR&gt;1500左右，广域网就只有几十字节。分片后的包将经过不同的路由到达接&lt;BR&gt;&lt;BR&gt;收方，对于UDP而言，要是其中一个分片丢失，那么接收方的IP层将把整&lt;BR&gt;&lt;BR&gt;个发送包丢弃，这就形成丢包。显然，要是一个UDP发包佷大，它被分片&lt;BR&gt;&lt;BR&gt;后，链路层丢失分片的几率就佷大，你这个UDP包，就佷容易丢失，但是&lt;BR&gt;&lt;BR&gt;太小又影响效率。最好可以配置这个值，以根据不同的环境来调整到最佳&lt;BR&gt;&lt;BR&gt;状态。&lt;BR&gt;send()函数返回了实际发送的长度，在网络不断的情况下，它绝不会返回&lt;BR&gt;&lt;BR&gt;(发送失败的)错误，最多就是返回0。对于TCP你可以字节写一个循环发送&lt;BR&gt;&lt;BR&gt;。当send函数返回SOCKET_ERROR时，才标志着有错误。&lt;BR&gt;但对于UDP，你不要写循环发送，否则将给你的接收带来极大的麻烦。所&lt;BR&gt;&lt;BR&gt;以UDP需要用SetSockOpt来改变Socket内部Buffer的大小，以能容纳你的&lt;BR&gt;&lt;BR&gt;发包。明确一点，TCP作为流，发包是不会整包到达的，而是源源不断的&lt;BR&gt;&lt;BR&gt;到，那接收方就必须组包。而UDP作为消息或数据报，它一定是整包到达&lt;BR&gt;&lt;BR&gt;接收方。&lt;BR&gt;&lt;BR&gt;2、关于接收，一般的发包都有包边界，首要的就是你这个包的长度要让&lt;BR&gt;&lt;BR&gt;接收方知道，于是就有个包头信息，对于TCP，接收方先收这个包头信息&lt;BR&gt;&lt;BR&gt;，然后再收包数据。一次收齐整个包也可以，可要对结果是否收齐进行验&lt;BR&gt;&lt;BR&gt;证。这也就完成了组包过程。UDP，那你只能整包接收了。要是你提供的&lt;BR&gt;&lt;BR&gt;接收Buffer过小，TCP将返回实际接收的长度，余下的还可以收，而UDP不&lt;BR&gt;&lt;BR&gt;同的是，余下的数据被丢弃并返回WSAEMSGSIZE错误。注意TCP，要是你提&lt;BR&gt;&lt;BR&gt;供的Buffer佷大，那么可能收到的就是多个发包，你必须分离它们，还有&lt;BR&gt;&lt;BR&gt;就是当Buffer太小，而一次收不完Socket内部的数据，那么Socket接收事&lt;BR&gt;&lt;BR&gt;件(OnReceive)，可能不会再触发，使用事件方式进行接收时，密切注意&lt;BR&gt;&lt;BR&gt;这点。这些特性就是体现了流和数据包的区别。&lt;BR&gt;&lt;BR&gt;补充一点，接收BuffSize &amp;gt;= 发送BuffSize &amp;gt;= 实际发送Size，对于内外&lt;BR&gt;&lt;BR&gt;部的Buffer都适用，上面讲的主要是Socket内部的Buffer大小关系。&lt;BR&gt;&lt;BR&gt;3、TCP是有多少就收多少，如果没有当然阻塞Socket的recv就会等，直到&lt;BR&gt;&lt;BR&gt;有数据，非阻塞Socket不好等，而是返回WSAEWOULDBLOCK。UDP，如果没&lt;BR&gt;&lt;BR&gt;有数据，阻塞Socket就会等，非阻塞Socket也返回WSAEWOULDBLOCK。如果&lt;BR&gt;&lt;BR&gt;有数据，它是会等整个发包到齐，并接收到整个发包，才返回。&lt;BR&gt;&lt;img src ="http://blog.vckbase.com/zaboli/aggbug/17157.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>玻璃小屋</dc:creator><title>（转）浅析:setsockopt()改善程序的健壮性</title><link>http://blog.vckbase.com/zaboli/archive/2005/11/25/15279.html</link><pubDate>Fri, 25 Nov 2005 08:27:00 GMT</pubDate><guid>http://blog.vckbase.com/zaboli/archive/2005/11/25/15279.html</guid><wfw:comment>http://blog.vckbase.com/zaboli/comments/15279.html</wfw:comment><comments>http://blog.vckbase.com/zaboli/archive/2005/11/25/15279.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.vckbase.com/zaboli/comments/commentRss/15279.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/zaboli/services/trackbacks/15279.html</trackback:ping><description>浅析:setsockopt()改善程序的健壮性&lt;BR&gt;&lt;SPAN class=tpc_content&gt;&lt;BR&gt;转自：&lt;A href="http://www.sureserv.com/bbs/read.php?fid=26&amp;amp;tid=18&amp;amp;page=lastpost&amp;amp;fpage=1"&gt;http://www.sureserv.com/bbs/read.php?fid=26&amp;amp;tid=18&amp;amp;page=lastpost&amp;amp;fpage=1&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;关于DONTLINGER和SO_LINGER的讲究还不少 -_-&lt;BR&gt;&lt;BR&gt;不断的收到coolmei25 (梅生)的答谢，我都不好意思了（我都没帮到他),下面&lt;BR&gt;写出我在网络编程中的一点心得体会，希望对他(^_^也对大家)有帮助:&lt;BR&gt;1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分）调用&lt;BR&gt;closesocket（一般不会立即关闭而经历TIME_WAIT的过程）后想继续重用该socket：&lt;BR&gt;BOOL bReuseaddr=TRUE;&lt;BR&gt;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&amp;amp;bReuseaddr,sizeof(BOOL));&lt;BR&gt;2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭，不经历&lt;BR&gt;TIME_WAIT的过程：&lt;BR&gt;BOOL bDontLinger = FALSE; &lt;BR&gt;setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&amp;amp;bDontLinger,sizeof(BOOL));&lt;BR&gt;3.在send(),recv()过程中有时由于网络状况等原因，发收不能预期进行,而设置收发时限：&lt;BR&gt;int nNetTimeout=1000;//1秒&lt;BR&gt;//发送时限&lt;BR&gt;setsockopt(socket，SOL_S0CKET,SO_SNDTIMEO，(char *)&amp;amp;nNetTimeout,sizeof(int));&lt;BR&gt;//接收时限&lt;BR&gt;setsockopt(socket，SOL_S0CKET,SO_RCVTIMEO，(char *)&amp;amp;nNetTimeout,sizeof(int));&lt;BR&gt;4.在send()的时候，返回的是实际发送出去的字节(同步)或发送到socket缓冲区的字节&lt;BR&gt;(异步);系统默认的状态发送和接收一次为8688字节(约为8.5K)；在实际的过程中发送数据&lt;BR&gt;和接收数据量比较大，可以设置socket缓冲区，而避免了send(),recv()不断的循环收发：&lt;BR&gt;// 接收缓冲区&lt;BR&gt;int nRecvBuf=32*1024;//设置为32K&lt;BR&gt;setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&amp;amp;nRecvBuf,sizeof(int));&lt;BR&gt;//发送缓冲区&lt;BR&gt;int nSendBuf=32*1024;//设置为32K&lt;BR&gt;setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&amp;amp;nSendBuf,sizeof(int));&lt;BR&gt;5. 如果在发送数据的时，希望不经历由系统缓冲区到socket缓冲区的拷贝而影响&lt;BR&gt;程序的性能：&lt;BR&gt;int nZero=0;&lt;BR&gt;setsockopt(socket，SOL_S0CKET,SO_SNDBUF，(char *)&amp;amp;nZero,sizeof(nZero));&lt;BR&gt;6.同上在recv()完成上述功能(默认情况是将socket缓冲区的内容拷贝到系统缓冲区)：&lt;BR&gt;int nZero=0;&lt;BR&gt;setsockopt(socket，SOL_S0CKET,SO_RCVBUF，(char *)&amp;amp;nZero,sizeof(int));&lt;BR&gt;7.一般在发送UDP数据报的时候，希望该socket发送的数据具有广播特性：&lt;BR&gt;BOOL bBroadcast=TRUE; &lt;BR&gt;setsockopt(s,SOL_SOCKET,SO_BROADCAST,(const char*)&amp;amp;bBroadcast,sizeof(BOOL));&lt;BR&gt;8.在client连接服务器过程中，如果处于非阻塞模式下的socket在connect()的过程中可&lt;BR&gt;以设置connect()延时,直到accpet()被呼叫(本函数设置只有在非阻塞的过程中有显著的&lt;BR&gt;作用，在阻塞的函数调用中作用不大)&lt;BR&gt;BOOL bConditionalAccept=TRUE;&lt;BR&gt;setsockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const char*)&amp;amp;bConditionalAccept,sizeof(BOOL));&lt;BR&gt;9.如果在发送数据的过程中(send()没有完成，还有数据没发送)而调用了closesocket(),以前我们&lt;BR&gt;一般采取的措施是"从容关闭"shutdown(s,SD_BOTH),但是数据是肯定丢失了，如何设置让程序满足具体&lt;BR&gt;应用的要求(即让没发完的数据发送出去后在关闭socket)？&lt;BR&gt;struct linger {&lt;BR&gt;u_short l_onoff;&lt;BR&gt;u_short l_linger;&lt;BR&gt;};&lt;BR&gt;linger m_sLinger;&lt;BR&gt;m_sLinger.l_onoff=1;//(在closesocket()调用,但是还有数据没发送完毕的时候容许逗留)&lt;BR&gt;// 如果m_sLinger.l_onoff=0;则功能和2.)作用相同;&lt;BR&gt;m_sLinger.l_linger=5;//(容许逗留的时间为5秒)&lt;BR&gt;setsockopt(s,SOL_SOCKET,SO_LINGER,(const char*)&amp;amp;m_sLinger,sizeof(linger));&lt;BR&gt;Note:1.在设置了逗留延时，用于一个非阻塞的socket是作用不大的，最好不用;&lt;BR&gt;2.如果想要程序不经历SO_LINGER需要设置SO_DONTLINGER，或者设置l_onoff=0；&lt;BR&gt;10.还一个用的比较少的是在SDI或者是Dialog的程序中，可以记录socket的调试信息：&lt;BR&gt;(前不久做过这个函数的测试，调式信息可以保存，包括socket建立时候的参数,采用的&lt;BR&gt;具体协议，以及出错的代码都可以记录下来）&lt;BR&gt;BOOL bDebug=TRUE;&lt;BR&gt;setsockopt(s,SOL_SOCKET,SO_DEBUG,(const char*)&amp;amp;bDebug,sizeof(BOOL));&lt;BR&gt;11.附加：往往通过setsockopt()设置了缓冲区大小，但还不能满足数据的传输需求，&lt;BR&gt;我的习惯是自己写个处理网络缓冲的类，动态分配内存;下面我将这个类写出，希望对&lt;BR&gt;初学者有所帮助：&lt;BR&gt;&lt;BR&gt;//仿照String 改写而成&lt;BR&gt;//==============================================================================&lt;BR&gt;// 二进制数据，主要用于收发网络缓冲区的数据&lt;BR&gt;// CNetIOBuffer 以 MFC 类 CString 的源代码作为蓝本改写而成，用法与 CString 类似，&lt;BR&gt;// 但是 CNetIOBuffer 中存放的是纯粹的二进制数据，'\0' 并不作为它的结束标志。&lt;BR&gt;// 其数据长度可以通过 GetLength() 获得，缓冲区地址可以通过运算符 LPBYTE 获得。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;//==============================================================================&lt;BR&gt;// Copyright (c) All-Vision Corporation. All rights reserved.&lt;BR&gt;// Module: NetObject&lt;BR&gt;// File: SimpleIOBuffer.h&lt;BR&gt;// Author: gdy119&lt;BR&gt;// Email : &lt;A href="mailto:8751webmaster@126.com"&gt;8751webmaster@126.com&lt;/A&gt;&lt;BR&gt;// Date: 2004.11.26&lt;BR&gt;//==============================================================================&lt;BR&gt;// NetIOBuffer.h&lt;BR&gt;#ifndef _NETIOBUFFER_H&lt;BR&gt;#define _NETIOBUFFER_H&lt;BR&gt;//=============================================================================&lt;BR&gt;#define MAX_BUFFER_LENGTH 1024*1024&lt;BR&gt;//=============================================================================&lt;BR&gt;//主要用来处理网络缓冲的数据&lt;BR&gt;class CNetIOBuffer &lt;BR&gt;{&lt;BR&gt;protected:&lt;BR&gt;LPBYTE m_pbinData;&lt;BR&gt;int m_nLength;&lt;BR&gt;int m_nTotalLength;&lt;BR&gt;CRITICAL_SECTIONm_cs;&lt;BR&gt;void Initvalibers();&lt;BR&gt;public:&lt;BR&gt;CNetIOBuffer();&lt;BR&gt;CNetIOBuffer(const LPBYTE lbbyte, int nLength);&lt;BR&gt;CNetIOBuffer(const CNetIOBuffer&amp;amp;binarySrc);&lt;BR&gt;virtual ~CNetIOBuffer();&lt;BR&gt;//=============================================================================&lt;BR&gt;BOOL CopyData(const LPBYTE lbbyte, int nLength);&lt;BR&gt;BOOL ConcatData(const LPBYTE lbbyte, int nLength);&lt;BR&gt;void ResetIoBuffer();&lt;BR&gt;int GetLength() const;&lt;BR&gt;BOOL SetLength(int nLen);&lt;BR&gt;LPBYTE GetCurPos();&lt;BR&gt;int GetRemainLen();&lt;BR&gt;BOOL IsEmpty() const;&lt;BR&gt;operator LPBYTE() const;&lt;BR&gt;static GetMaxLength() { return MAX_BUFFER_LENGTH; }&lt;BR&gt;const CNetIOBuffer&amp;amp; operator=(const CNetIOBuffer&amp;amp; buffSrc);&lt;BR&gt;};&lt;BR&gt;#endif // &lt;BR&gt;// NetOBuffer.cpp: implementation of the CNetIOBuffer class.&lt;BR&gt;//======================================================================&lt;BR&gt;#include "stdafx.h"&lt;BR&gt;#include "NetIOBuffer.h"&lt;BR&gt;//======================================================================&lt;BR&gt;//=======================================================================&lt;BR&gt;// Construction/Destruction&lt;BR&gt;CNetIOBuffer::CNetIOBuffer()&lt;BR&gt;{&lt;BR&gt;Initvalibers();&lt;BR&gt;&lt;BR&gt;}&lt;BR&gt;CNetIOBuffer::CNetIOBuffer(const LPBYTE lbbyte, int nLength)&lt;BR&gt;{&lt;BR&gt;Initvalibers();&lt;BR&gt;CopyData(lbbyte, nLength);&lt;BR&gt;}&lt;BR&gt;CNetIOBuffer::~CNetIOBuffer()&lt;BR&gt;{&lt;BR&gt;delete []m_pbinData;&lt;BR&gt;m_pbinData=NULL;&lt;BR&gt;DeleteCriticalSection(&amp;amp;m_cs);&lt;BR&gt;&lt;BR&gt;}&lt;BR&gt;CNetIOBuffer::CNetIOBuffer(const CNetIOBuffer&amp;amp;binarySrc)&lt;BR&gt;{&lt;BR&gt;&lt;BR&gt;Initvalibers();&lt;BR&gt;CopyData(binarySrc,binarySrc.GetLength());&lt;BR&gt;&lt;BR&gt;}&lt;BR&gt;void CNetIOBuffer::Initvalibers()&lt;BR&gt;{&lt;BR&gt;&lt;BR&gt;m_pbinData = NULL;&lt;BR&gt;m_nLength = 0;&lt;BR&gt;m_nTotalLength = MAX_BUFFER_LENGTH;&lt;BR&gt;if(m_pbinData==NULL)&lt;BR&gt;{&lt;BR&gt;m_pbinData=new BYTE[m_nTotalLength];&lt;BR&gt;ASSERT(m_pbinData!=NULL);&lt;BR&gt;}&lt;BR&gt;InitializeCriticalSection(&amp;amp;m_cs);&lt;BR&gt;}&lt;BR&gt;void CNetIOBuffer::ResetIoBuffer()&lt;BR&gt;{&lt;BR&gt;EnterCriticalSection(&amp;amp;m_cs);&lt;BR&gt;m_nLength = 0;&lt;BR&gt;memset(m_pbinData,0,m_nTotalLength);&lt;BR&gt;LeaveCriticalSection(&amp;amp;m_cs);&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;BOOL CNetIOBuffer::CopyData(const LPBYTE lbbyte, int nLength)&lt;BR&gt;{&lt;BR&gt;if( nLength &amp;gt; MAX_BUFFER_LENGTH )&lt;BR&gt;return FALSE;&lt;BR&gt;&lt;BR&gt;ResetIoBuffer();&lt;BR&gt;EnterCriticalSection(&amp;amp;m_cs);&lt;BR&gt;memcpy(m_pbinData, lbbyte, nLength );&lt;BR&gt;m_nLength = nLength;&lt;BR&gt;LeaveCriticalSection(&amp;amp;m_cs);&lt;BR&gt;&lt;BR&gt;return TRUE;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;BOOL CNetIOBuffer::ConcatData(const LPBYTE lbbyte, int nLength)&lt;BR&gt;{&lt;BR&gt;if( m_nLength + nLength &amp;gt; MAX_BUFFER_LENGTH )&lt;BR&gt;return FALSE;&lt;BR&gt;&lt;BR&gt;EnterCriticalSection(&amp;amp;m_cs);&lt;BR&gt;memcpy(m_pbinData+m_nLength, lbbyte, nLength );&lt;BR&gt;m_nLength += nLength;&lt;BR&gt;LeaveCriticalSection(&amp;amp;m_cs);&lt;BR&gt;&lt;BR&gt;return TRUE;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;int CNetIOBuffer::GetLength() const&lt;BR&gt;{&lt;BR&gt;return m_nLength;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;BOOL CNetIOBuffer::SetLength(int nLen)&lt;BR&gt;{&lt;BR&gt;if( nLen &amp;gt; MAX_BUFFER_LENGTH )&lt;BR&gt;return FALSE;&lt;BR&gt;&lt;BR&gt;EnterCriticalSection(&amp;amp;m_cs);&lt;BR&gt;m_nLength = nLen;&lt;BR&gt;LeaveCriticalSection(&amp;amp;m_cs);&lt;BR&gt;&lt;BR&gt;return TRUE;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;LPBYTE CNetIOBuffer::GetCurPos()&lt;BR&gt;{&lt;BR&gt;&lt;BR&gt;if( m_nLength &amp;lt; MAX_BUFFER_LENGTH )&lt;BR&gt;&lt;BR&gt;return (m_pbinData+m_nLength);&lt;BR&gt;&lt;BR&gt;else&lt;BR&gt;return NULL;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;CNetIOBuffer:: operator LPBYTE() const&lt;BR&gt;{&lt;BR&gt;return m_pbinData;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;int CNetIOBuffer::GetRemainLen()&lt;BR&gt;{&lt;BR&gt;&lt;BR&gt;return MAX_BUFFER_LENGTH - m_nLength;&lt;BR&gt;&lt;BR&gt;}&lt;BR&gt;BOOL CNetIOBuffer::IsEmpty() const&lt;BR&gt;{&lt;BR&gt;return m_nLength == 0;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;const CNetIOBuffer&amp;amp; CNetIOBuffer:: operator=(const CNetIOBuffer&amp;amp; buffSrc)&lt;BR&gt;{&lt;BR&gt;if(&amp;amp;buffSrc!=this)&lt;BR&gt;{&lt;BR&gt;CopyData(buffSrc, buffSrc.GetLength());&lt;BR&gt;&lt;BR&gt;}&lt;BR&gt;return *this;&lt;BR&gt;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;回复人： PiggyXP(【小猪】●至爱VC，至爱网络版●) ( ) 信誉：204 &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;其实我觉得第5条很应该值得注意&lt;BR&gt;int nZero=0;&lt;BR&gt;setsockopt(socket，SOL_S0CKET,SO_SNDBUF，(char *)&amp;amp;nZero,sizeof(nZero));&lt;BR&gt;&lt;BR&gt;记得以前有些朋友讨论过，socket虽然send成功了，但是其实只是发送到数据缓冲区里面了，而并没有真正的在物理设备上发送出去；而通过这条语句，将发送缓冲区设置为0，即屏蔽掉发送缓冲以后，一旦send返回（当然是就阻塞套结字来说），就可以肯定数据已经在发送的途中了^_^，但是这样做也许会影响系统的性能&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;to:Sander() &lt;BR&gt;UDP也有拷贝过程，但是UDP包有最大限制为64K；&lt;BR&gt;TCP_NODELAY 一般用在the normal data stream 上；&lt;BR&gt;12.发送数据时候一般是系统缓冲区满以后才发送，现在设置为只要系统&lt;BR&gt;缓冲区有数据就立刻发送： &lt;BR&gt;BOOL bNodelay=TRUE;&lt;BR&gt;SetSockOpt(s,IPPROTO_TCP,TCP_NODELAY,(const char*)&amp;amp;bNodelayt,sizeof(BOOL));&lt;BR&gt;&lt;BR&gt;回复人： od4ys(风风) ( ) 信誉：100 &lt;BR&gt;&lt;BR&gt;setoptsock（）这个函数 设置成端口复用的时候，很容易对一些没有进行单独bind模式的程序造成危害。&lt;BR&gt;比如old的 ping icmp door，简单的sniffer后，收到包，然后设置setoptsock bind web服务，然后建立个cmd进程 bind再80端口。&lt;BR&gt;&lt;/SPAN&gt;&lt;img src ="http://blog.vckbase.com/zaboli/aggbug/15279.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>玻璃小屋</dc:creator><title>TCP 黏包 拆包代码！做过的前辈请指教？！</title><link>http://blog.vckbase.com/zaboli/archive/2005/11/09/14644.html</link><pubDate>Wed, 09 Nov 2005 07:59:00 GMT</pubDate><guid>http://blog.vckbase.com/zaboli/archive/2005/11/09/14644.html</guid><wfw:comment>http://blog.vckbase.com/zaboli/comments/14644.html</wfw:comment><comments>http://blog.vckbase.com/zaboli/archive/2005/11/09/14644.html#Feedback</comments><slash:comments>30</slash:comments><wfw:commentRss>http://blog.vckbase.com/zaboli/comments/commentRss/14644.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/zaboli/services/trackbacks/14644.html</trackback:ping><description>&lt;BR&gt;贴一段韩国小伙写的 TCP 拆包的代码！他的解决方式是直接 从socket缓冲区就开拆了，并没有从缓冲中取出来然后再拆！我没写过拆包，也不知道以前前辈们是怎么拆包的？是直接在socket缓冲拆？还是读到另外的地方再拆？！&lt;BR&gt;另外还有个问题 就是 明明 socket 是阻塞的，但是还会返回 &lt;STRONG&gt;WSAEWOULDBLOCK&lt;BR&gt;&lt;/STRONG&gt;10035 错误！ 不知道为什么 @_@&lt;BR&gt;&lt;BR&gt;另外 socket 是每次 send 的字节 小于 一个  MTU size. 最好吗？？？因为下面的代码在发送时，好象每次只 send&amp;nbsp; 512 byte ，不知道这样是会提高发送速度 ？还是减少发送速度？！或者有什么其他好处？！他原文中的理由是：Have you ever met with a situation where you had to sent a large data packet (more than thousand bytes) using one function call (like &lt;CODE&gt;WriteFile&lt;/CODE&gt;, &lt;CODE&gt;WSASend&lt;/CODE&gt; or &lt;CODE&gt;send&lt;/CODE&gt;) and then the receiver didn't get the data packet you had sent? If you have met, then you might have met with the problem of network hardware (routers, HUBs, and so on) and buffer - MTU (Most Transfer Unit). The least MTU of network hardware is 576 bytes, so it is better that the large packet is sliced into many smaller packets less than the least MTU size. In &lt;CODE&gt;OIOCPNet&lt;/CODE&gt;, I have defined the unit data block size as &lt;CODE&gt;BUFFER_UNIT_SIZE&lt;/CODE&gt; (512 bytes). If you need a bigger one, you can change it.&lt;BR&gt;&lt;BR&gt;下面的代码是 这个小伙子封装的 IOCP 中的一部分代码（&lt;A href="http://www.codeproject.com/internet/IOCPNet.asp"&gt;http://www.codeproject.com/internet/IOCPNet.asp&lt;/A&gt;）！ 因为我对TCP拆包感兴趣，所以单独提出来了。想学学前辈们对于TCP黏包的拆包是怎么处理的 ....希望进来看同志留下点意见。&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"&gt;
&lt;DIV&gt;&lt;IMG id=Codehighlighter1_0_100_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_100_Open_Text.style.display='none'; Codehighlighter1_0_100_Closed_Image.style.display='inline'; Codehighlighter1_0_100_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_0_100_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_100_Closed_Text.style.display='none'; Codehighlighter1_0_100_Open_Image.style.display='inline'; Codehighlighter1_0_100_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;SPAN id=Codehighlighter1_0_100_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;/**/&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_0_100_Open_Text&gt;&lt;SPAN style="COLOR: #808080"&gt;///////////////////////////////////////////////////////////////////////////////////////////////////&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Module&amp;nbsp;Name:&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TCPFunc.h&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Author:&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Chun-Hyok,&amp;nbsp;Chong.&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description:&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;It&amp;nbsp;provides&amp;nbsp;the&amp;nbsp;basic&amp;nbsp;network&amp;nbsp;functions&amp;nbsp;handle&amp;nbsp;reading/writing/packaging&amp;nbsp;rough(?)&amp;nbsp;data.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG id=Codehighlighter1_272_372_Open_Image onclick="this.style.display='none'; Codehighlighter1_272_372_Open_Text.style.display='none'; Codehighlighter1_272_372_Closed_Image.style.display='inline'; Codehighlighter1_272_372_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_272_372_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_272_372_Closed_Text.style.display='none'; Codehighlighter1_272_372_Open_Image.style.display='inline'; Codehighlighter1_272_372_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_272_372_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;/**/&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_272_372_Open_Text&gt;&lt;SPAN style="COLOR: #808080"&gt;///////////////////////////////////////////////////////////////////////////////////////////////////&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;#ifndef&amp;nbsp;__TCPFUNC_H_&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#define&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;__TCPFUNC_H_&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Workframe.h&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#define&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;TCP_CHECK_ALIVE_MSG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"checkalive"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#define&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;TCP_CHECK_ALIVE_LEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;TCPRead(SOCKET&amp;nbsp;Socket,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;char&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Buffer,&amp;nbsp;DWORD&amp;nbsp;BufferSize,&amp;nbsp;DWORD&amp;nbsp;TimeoutMilli,&amp;nbsp;DWORD&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;ErrorCode);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;TCPWrite(SOCKET&amp;nbsp;Socket,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;char&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Buffer,&amp;nbsp;DWORD&amp;nbsp;BufferSize,&amp;nbsp;DWORD&amp;nbsp;TimeoutMilli,&amp;nbsp;DWORD&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;ErrorCode);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#endif&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;__TCPFUNC_H_&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"&gt;
&lt;DIV&gt;&lt;IMG id=Codehighlighter1_0_100_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_100_Open_Text.style.display='none'; Codehighlighter1_0_100_Closed_Image.style.display='inline'; Codehighlighter1_0_100_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_0_100_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_100_Closed_Text.style.display='none'; Codehighlighter1_0_100_Open_Image.style.display='inline'; Codehighlighter1_0_100_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;SPAN id=Codehighlighter1_0_100_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;/**/&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_0_100_Open_Text&gt;&lt;SPAN style="COLOR: #808080"&gt;///////////////////////////////////////////////////////////////////////////////////////////////////&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Module&amp;nbsp;Name:&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TCPFunc.cpp&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Author:&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Chun-Hyok,&amp;nbsp;Chong.&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description:&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;It&amp;nbsp;provides&amp;nbsp;the&amp;nbsp;basic&amp;nbsp;network&amp;nbsp;functions&amp;nbsp;handle&amp;nbsp;reading/writing/packaging&amp;nbsp;rough(?)&amp;nbsp;data.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG id=Codehighlighter1_274_374_Open_Image onclick="this.style.display='none'; Codehighlighter1_274_374_Open_Text.style.display='none'; Codehighlighter1_274_374_Closed_Image.style.display='inline'; Codehighlighter1_274_374_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_274_374_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_274_374_Closed_Text.style.display='none'; Codehighlighter1_274_374_Open_Image.style.display='inline'; Codehighlighter1_274_374_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_274_374_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;/**/&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_274_374_Open_Text&gt;&lt;SPAN style="COLOR: #808080"&gt;///////////////////////////////////////////////////////////////////////////////////////////////////&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;stdafx.h&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Workframe.h&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;TCPFunc.h&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;WorkframeReturnCode.h&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#include&amp;nbsp;"SafeDynMem.h"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;#ifdef&amp;nbsp;BLOCK&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#undef&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;BLOCK&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#endif&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;BLOCK&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#define&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;READ_UNIT_SIZE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;512&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;less&amp;nbsp;than&amp;nbsp;general&amp;nbsp;MTU&amp;nbsp;size.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#define&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;WRITE_UNIT_SIZE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;512&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;less&amp;nbsp;than&amp;nbsp;general&amp;nbsp;MTU&amp;nbsp;size.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#define&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;MSG_LEN_INFO_SIZE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#define&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;MAX_NET_TRIAL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#define&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;CHECK_ALIVE_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-987654321&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#define&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;MAX_RECV_AGAIN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;TCPRead(SOCKET&amp;nbsp;Socket,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;char&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Buffer,&amp;nbsp;DWORD&amp;nbsp;BufferSize,&amp;nbsp;DWORD&amp;nbsp;TimeoutMilli,&amp;nbsp;DWORD&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;ErrorCode)&lt;BR&gt;&lt;IMG id=Codehighlighter1_910_5919_Open_Image onclick="this.style.display='none'; Codehighlighter1_910_5919_Open_Text.style.display='none'; Codehighlighter1_910_5919_Closed_Image.style.display='inline'; Codehighlighter1_910_5919_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_910_5919_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_910_5919_Closed_Text.style.display='none'; Codehighlighter1_910_5919_Open_Image.style.display='inline'; Codehighlighter1_910_5919_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_910_5919_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_910_5919_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOL&amp;nbsp;bError;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;ReturnCode;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;char&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;LenInfo[MSG_LEN_INFO_SIZE];&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;RetLen;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;char&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;ReadBuff[READ_UNIT_SIZE];&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWORD&amp;nbsp;CopyingSize;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;ResRecv;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Timeout;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;char&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;pReadingPoint;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;ToReadSize;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;UnitReadSize;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;TimeoutOld;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;OutLen;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;LoopCount;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;RecvAgainCount;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bError&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReturnCode&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;RET_FAIL;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TimeoutOld&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Socket&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;||&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;==&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;ErrorCode)&lt;BR&gt;&lt;IMG id=Codehighlighter1_1288_1346_Open_Image onclick="this.style.display='none'; Codehighlighter1_1288_1346_Open_Text.style.display='none'; Codehighlighter1_1288_1346_Closed_Image.style.display='inline'; Codehighlighter1_1288_1346_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_1288_1346_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1288_1346_Closed_Text.style.display='none'; Codehighlighter1_1288_1346_Open_Image.style.display='inline'; Codehighlighter1_1288_1346_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1288_1346_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1288_1346_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bError&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReturnCode&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;RET_FAIL;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;goto&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;ErrHand;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;ErrorCode&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG id=Codehighlighter1_1366_1899_Open_Image onclick="this.style.display='none'; Codehighlighter1_1366_1899_Open_Text.style.display='none'; Codehighlighter1_1366_1899_Closed_Image.style.display='inline'; Codehighlighter1_1366_1899_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_1366_1899_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1366_1899_Closed_Text.style.display='none'; Codehighlighter1_1366_1899_Open_Image.style.display='inline'; Codehighlighter1_1366_1899_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1366_1899_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;/**/&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1366_1899_Open_Text&gt;&lt;SPAN style="COLOR: #008000"&gt;/*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OutLen&amp;nbsp;=&amp;nbsp;sizeof&amp;nbsp;(TimeoutOld);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(SOCKET_ERROR&amp;nbsp;==&amp;nbsp;getsockopt(Socket,&amp;nbsp;SOL_SOCKET,&amp;nbsp;SO_RCVTIMEO,&amp;nbsp;(char&amp;nbsp;*)&amp;amp;TimeoutOld,&amp;nbsp;&amp;amp;OutLen))&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*ErrorCode&amp;nbsp;=&amp;nbsp;WSAGetLastError();&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bError&amp;nbsp;=&amp;nbsp;1;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReturnCode&amp;nbsp;=&amp;nbsp;RET_FAIL;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;goto&amp;nbsp;ErrHand;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Timeout&amp;nbsp;=&amp;nbsp;TimeoutMilli;&amp;nbsp;//&amp;nbsp;Assigning&amp;nbsp;is&amp;nbsp;due&amp;nbsp;to&amp;nbsp;input&amp;nbsp;the&amp;nbsp;address&amp;nbsp;of&amp;nbsp;the&amp;nbsp;Timeout.&amp;nbsp;0&amp;nbsp;=&amp;nbsp;infinite.&amp;nbsp;WSAETIMEDOUT&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(SOCKET_ERROR&amp;nbsp;==&amp;nbsp;setsockopt(Socket,&amp;nbsp;SOL_SOCKET,&amp;nbsp;SO_RCVTIMEO,&amp;nbsp;(char&amp;nbsp;*)&amp;amp;Timeout,&amp;nbsp;sizeof&amp;nbsp;(Timeout)))&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*ErrorCode&amp;nbsp;=&amp;nbsp;WSAGetLastError();&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bError&amp;nbsp;=&amp;nbsp;1;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReturnCode&amp;nbsp;=&amp;nbsp;RET_FAIL;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;goto&amp;nbsp;ErrHand;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;*/&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;==&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Buffer&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;||&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;==&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;BufferSize)&lt;BR&gt;&lt;IMG id=Codehighlighter1_1939_4090_Open_Image onclick="this.style.display='none'; Codehighlighter1_1939_4090_Open_Text.style.display='none'; Codehighlighter1_1939_4090_Closed_Image.style.display='inline'; Codehighlighter1_1939_4090_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_1939_4090_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1939_4090_Closed_Text.style.display='none'; Codehighlighter1_1939_4090_Open_Image.style.display='inline'; Codehighlighter1_1939_4090_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1939_4090_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_1939_4090_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;RecvAgainNew:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;