WSACleanUp导致异常

我的应用程序可以在串行和套接字连接之间切换,但两者都不能同时打开。因此,当我尝试在Socket到Serial之间切换时,我删除了Socket连接。 基于套接字的对象使用一个名为UsesWinsock的私有类(这是对Len Holgate的一个大喊,因为它基本上是他的代码(实际上它是RAII但我从未将它应用到WSA直到我看到他这样做))。这只是调用WSAStart和WSACleanUp。 当调用WSACleanUp时,它会进入NTDLL和汇编程序。 @ err,hr给我“传递给系统调用的数据区域太小”作为HRESULT。 我试过移动代码:按照继承的顺序移动类会导致破坏序列发生变化并实际破坏函数,因此它们是破坏序列中最后要调用的东西。都没有奏效。 我很确定我已经释放了所有分配的内容(只有1个套接字和几个事件)并且我被卡住了 - 这对我来说是一个相当重要的问题。 谷歌没有帮助返回4个结果,但没有解决我的问题。 有什么建议?     
已邀请:
那么,你使用我的UsesWinsock类吗?也就是说,你说它坏了吗?如果是这样,直接向我发送电子邮件可能是解决问题的更有效方法;) 我注意到我的代码实际上没有检查dtor中WSACleanUp()的返回代码,所以,我假设你正在检查这个,它是SOCKET-ERROR而WSAGetLastError()报告ERROR-INSUFFICIENT-BUFFER?     
如果你使用wt,我会很高兴知道你会发现什么 Windows调试器中的“跟踪和监视数据”命令: 在WSACleanup的开头设置一个断点: bp ws2_32!wsacleanup 点击后,发出trace命令: wt -oa -oR @ $ ra 并注意对ntdll的调用!RtlSetLastWin32Error 你也可以在这里发表调查结果,看看它们很有意思。     

要回复问题请先登录注册