Winsock"接收"函数返回 0 字节,如果在同一台计算机正在运行 Windows Server 2003 上运行的客户端和服务器端应用程序时,会发生数据丢失

适用于: Microsoft Windows Server 2003 Datacenter Edition (32-bit x86)Microsoft Windows Server 2003 Datacenter Edition for Itanium-Based SystemsMicrosoft Windows Server 2003 Datacenter x64 Edition

症状


请考虑以下情形:
  • 在运行 Windows Server 2003 的计算机上,您可以建立 Winsock 连接。客户端和服务器端应用程序在此计算机上运行。
  • 调用用于接收数据的接收函数。
在这种情况下,接收函数随机返回 0 字节。此返回的值为 0 字节将导致数据丢失。但是,如果您立即重新调用接收函数,预期的数据接收成功。

原因


TCP/IP 协议驱动程序 (Tcpip.sys) 随机触发断开连接事件,而该驱动程序接收到接收请求。因此,在数据传输过程被中断,并出现"症状"一节中提到的问题。

解决方案


修补程序信息

可以从 Microsoft 获得受支持的修复程序。但是,此修补程序用于解决本文中描述的问题。此修复程序仅适用于遇到本文中描述的问题的系统。此修补程序可能会接受进一步的测试。因此,如果这个问题没有对您造成严重的影响,我们建议您等待包含此修复程序的下一个软件更新。

如果此修复程序可供下载,则在此知识库文章的顶部会出现“修补程序下载可用”部分。如果未显示此部分,请与 Microsoft 客户服务和支持部门联系以获取此修复程序。

注意:如果出现其他问题或需要任何故障诊断时,您可能需要创建单独的服务请求。对于不符合此特定的修补程序的其他支持问题和事项将照常收取费用。有关 Microsoft 客户服务和支持电话号码或创建单独的服务请求的完整列表,请访问下面的 Microsoft 网站︰注意:"提供修补程序下载"窗体显示获取此修复程序的语言。如果看不到您的语言,则修补程序没有那种语言的版本。

系统必备组件

若要应用此修补程序,计算机必须运行 Windows 2003 Service Pack 2 (SP2)。

重启要求

应用此修补程序后,必须重新启动计算机。

修补程序替换信息


此修补程序不替换任何其他以前发布的修补程序。

文件信息

此修复程序的英文版具有的文件属性 (或更新的文件属性)在下表中列出。日期和为这些文件的时间以协调世界时 (UTC) 列出。当您查看文件信息时,它将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用控制面板中的日期和时间项中的时区选项卡。
对于所有受支持的基于 x86 的 Windows Server 2003 SP2 的版本
文件名称文件版本文件大小日期时间平台
Tcpip.sys5.2.3790.4531391,16816-Jun-200911:52x86
对于所有受支持的 Windows Server 2003 SP2 基于 Itanium 的版本
文件名称文件版本文件大小日期时间平台
Tcpip.sys5.2.3790.45311,311,23216-Jun-200913:13IA-64
对于所有受支持的基于 x64 版本的 Windows 服务器 2003 SP 2 以及 Windows XP SP2
文件名称文件版本文件大小日期时间平台
Tcpip.sys5.2.3790.4531785,40816-Jun-200913:13x64

解决方法


若要变通解决此问题,如果从接收函数返回 0 字节重试从相同的套接字接收函数。

状态


Microsoft 已经确认这是“适用于”一节中列出的 Microsoft 产品中的问题。

详细信息


接收函数的详细信息,请访问下面的 Microsoft 网站︰有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

用于描述 Microsoft 软件更新的标准术语的824684说明