Winsock - 10038 错误 - Win2K3 服务器 - 令人费解的行为

Posted

技术标签:

【中文标题】Winsock - 10038 错误 - Win2K3 服务器 - 令人费解的行为【英文标题】:Winsock - 10038 Error - Win2K3 Server - baffling behaviour 【发布时间】:2008-09-19 06:37:32 【问题描述】:

尝试通过套接字发送消息失败,出现 WinSock 错误 10038。大约 40 秒后,从同一套接字成功接收消息,随后 send() 在同一套接字中也成功。这种行为在 Windows Server 2003 中已经出现。这是 WinSock 和 Windows Server 2003 的任何已知行为吗?

【问题讨论】:

您是否在其他平台(例如 XP)上尝试过? 在您尝试访问套接字之前是否存在尚未完成的异步创建调用? 【参考方案1】:

Winsock 错误 10038 表示“尝试对非套接字的操作进行操作”。

查找错误代码信息的小技巧(适用于各种 Windows 错误代码):

打开命令提示符 输入“net helpmsg 10038”

您的应用程序是用什么语言编写的?如果是 C/C++,会不会是你使用了无效的套接字句柄?

【讨论】:

【参考方案2】:

非常感谢 a_mole 检查分层的 Winsock 提供程序的想法。我们的一些 PC 和 TimesTen DB 存在问题。当我们尝试设置 ODBC 客户端 DSN 时,我们收到 10038 错误。在检查受影响 PC 的 netsh 输出时,我们发现它们安装了 Wave Systems 的 Embassy Trust Suite。显然戴尔在他们的一些个人电脑上预装了这个。反正卸载了这个软件,问题就解决了。

再次感谢

【讨论】:

【参考方案3】:

不是平台问题,我可以保证。最有可能的是,您用来访问套接字句柄的任何变量都不是线程安全的,而是在创建实际套接字之前在 send() 调用中使用。

另一个可能的原因是存在分层的 Winsock 提供程序。 cmd 提示符下的“netsh winsock show”将显示已安装的提供程序,您可以尝试删除任何非 Microsoft 提供程序。

【讨论】:

以上是关于Winsock - 10038 错误 - Win2K3 服务器 - 令人费解的行为的主要内容,如果未能解决你的问题,请参考以下文章

C++ Winsock 套接字错误:10038 (WSAENOTSOCK)

[mpm_winnt:error] [pid 28120:tid 15980] (OS 10038)在一个非套接字上尝试了一个操作。 : AH00332: winnt_accept: getsock

mysql远程连接错误10038--navicat for mysql (10038)

bind() 失败并出现 Windows 套接字错误 10038

mysql 10038错误解决方案

关于mysql连接抛出10038错误问题