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

有帮助吗?

解决方案

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

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

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

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

其他提示

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

再次感谢

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top