我的应用程序可以在串行连接和套接字连接之间切换,但不能同时打开。因此,当我尝试在 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/