c++ - WSACleanUp 导致异常

标签 c++ sockets wsastartup windows-socket-api wsacleanup

我的应用程序可以在串行连接和套接字连接之间切换,但不能同时打开。因此,当我尝试在 Socket 和 Serial 之间切换时,我删除了 Socket 连接。

基于套接字的对象使用了一个名为 UsesWinsock 的私有(private)类(在这里向 Len Holgate 大喊大叫,因为它基本上是他的代码(实际上是 RAII,但我从未将它应用于 WSA,直到我看到他这样做))。这只是调用 WSAStart 和 WSACleanUp。

当调用 WSACleanUp 时,它会进入 NTDLL 和汇编程序。 @err,hr 将“传递给系统调用的数据区域太小”作为 HRESULT。

我试过移动代码:按继承顺序移动类会导致破坏序列发生变化,实际上会分解函数,因此它们是破坏序列中最后调用的东西。都没有用。

我很确定我已经释放了所有分配的东西(只有 1 个套接字和几个事件)但我卡住了 - 这对我来说是一个相当重要的问题。

Google is unhelpful returning 4 results of which none solve my problem .

有什么建议吗?

最佳答案

那么,您是否按原样使用我的 UsesWinsock 类?也就是说,你是说它坏了?如果是这样,直接给我发电子邮件可能是解决问题的更有效方法;)

我注意到我的代码实际上并没有检查 dtor 中 WSACleanUp() 的返回码,所以,我假设你正在检查这个,它是 SOCKET-ERROR 并且 WSAGetLastError() 正在报告 ERROR-INSUFFICIENT-BUFFER ?

关于c++ - WSACleanUp 导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/552948/

相关文章:

c++ - Spectra 的 SymEigsShiftSolver 不返回特征向量吗?

multithreading - TCP 发送函数的奇怪行为

c - 为什么 POSIX 与 ISO C 标准相矛盾

c++ - Winsock 错误代码 10014

c - Windows 套接字错误代码 10055

c++ - 如何找到wxWidgets?

c++ - 关闭 session 后 Tensorflow C++ 不释放 GPU 资源

c++ - 在 VC++ 项目中开始使用 PCH

python - 使用套接字从 Python(客户端)向 C++(服务器)数组发送数据

delphi - FireMonkey3下检测本地IP地址