问题标签 [wsacleanup]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6572 浏览

sockets - WSAStartup 和 WSACleanup 的成本是多少?

我有一个 c++ win32 程序,它使用套接字从服务器下载一些数据。

在 Windows 上使用套接字之前,必须调用 WSAStartup。MSDN 说:“每次成功调用 WSAStartup 都必须调用 WSACleanup。只有最终的 WSACleanup 函数调用执行实际的清理。”

对我来说最简单的方法是每次从服务器下载数据时调用 WSAStartup/WSACleanup。大多数情况下,一次只有一个连接,因此 WSACleanup 将执行实际的清理。

这就是为什么我想知道 WSAStartup 和 WSACleanup 的成本是多少?我的意思是执行实际的清理。如果与整个套接字连接相比,对 WSAStartup 和 WSACleanup 的调用只持续很短的时间,那么我可以使用简单的方法。如果没有,我应该注意仅在退出程序时调用 WSACleanup。

0 投票
2 回答
1517 浏览

c++ - WSACleanUp 导致异常

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

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

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

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

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

谷歌返回 4 个结果没有帮助解决我的问题

有什么建议么?

0 投票
3 回答
3408 浏览

c++ - WSACleanup 和 atExit

可以通过 atExit 函数注册 WSACleanup 吗?我们有几个应用程序可以在代码中的不同点终止,因此我们希望避免将 WSACleanup 放在代码中的任何地方。目前我们通过 DllMain 调用 WSAStartup / WSACleanup,因为我们有一个所有这些应用程序都使用的 dll。但是,Microsoft 严格建议不要通过 DllMain 使用 WSAStartup / WSACleanup,因为这会导致死锁。我们可以将 WSAStarup 移出 DllMain,并在所有应用程序访问 Windows 套接字库之前在代码中的某一点调用它。而且,一旦我们调用 WSAStartup,我们就想使用 atExit 函数来注册对 WSACleanup 的调用。有没有人有这种方法的经验?谢谢!

0 投票
2 回答
4836 浏览

c++ - Windows 套接字 WSACleanup C++

我在我的程序上使用套接字。由于我添加了WSAStartup. 我的应用程序运行良好(一直到收到停止信号为止)。收到信号后,它停止了一个问题,即如果我WSACleanup在程序末尾编写函数,它会崩溃,如果我删除它,它会正常终止。

谢谢

0 投票
2 回答
234 浏览

c++ - Using boost::shared_ptr with WSACleanup

I would like to use a boost::shared_ptr in order for WSACleanup() to be called when my function goes out of scope, like this:

This does not compile,

Error 1 error C2197: 'int (__stdcall *)(void)' : too many arguments for call C:\projects\svn-5.3\ESA\Common\include\boost\detail\shared_count.hpp 116

any thoughts?

0 投票
3 回答
7123 浏览

c - Windows 套接字错误代码 10055

我开发了一个在 Windows 上使用套接字的应用程序。它运行良好,但一段时间后,互联网连接开始失败,最后我收到此错误(10055),这意味着我的应用程序缓冲区空间不足。

实际上,我认为我只使用了 2 个套接字和我自己编写的代码,但确实我使用的是第 3 方库,我不知道它是如何实现的。

我读过很多关于这个麻烦的文献,所以我不是唯一一个遭受它的人,但我不知道如何解决它,或者至少绕过它,因为当它失败时,它会导致我的电脑失去了互联网连接。我已经通过捕获此错误进行了尝试,当它发生时WSACleanup()WSAStartup()即使它不是最佳实践,也会执行 a ......但我的应用程序仍然会陷入此错误。

任何建议将不胜感激。

0 投票
1 回答
255 浏览

c++ - 由于 WSACleanup,sql server has gone away 错误

我想寻求帮助,因为我不知道该怎么办了。我有一个用 c++ 创建的模拟器,它接受来自用户的 id 输入并检查它是否在仅在本地主机中的数据库中(在 mysql 工作台中创建)。

问题是模拟器连接到另一台用作服务器的计算机(通过winsock连接)。如果服务器启动,它可以正常工作或者如果所有输入都错误,但是如果服务器关闭(我的代码将尝试再次连接到服务器 pc,所以我必须调用 WSACleanup)在输入一个正确的值并输入后另一个 mysql_query 返回 mysql 服务器已消失的错误。然后程序会在转到 mysql_num_rows 时中断。

我在另一个函数中有这段代码,当我将它们一个一个注释掉时,我发现错误是由于 WSACleanup() 引起的。如果 WSACleanup 行不存在,我的查询运行正常。

我希望有人可以帮助我。

0 投票
1 回答
382 浏览

c++ - 对 WSACleanup() 的错误调用会杀死 WSAStartup()

我有运行 TCP 服务器的应用程序。要初始化 TCP,我运行WSAStartup(). 然后我需要加载第三方dll。Dll 也做一些 TCP 工作并且有一些错误 - 它运行WSACleanup()而不运行WSAStartup()。这个错误会阻止我的 TCP 服务器,因为 dll 会WSACleanup()杀死它。

我无法修复dll。如何避免这种情况。看起来在不同线程中运行使用 dll 和我的 TCP 服务器没有帮助

0 投票
1 回答
848 浏览

windows-ce - 不调用 WSACleanup 的后果

我正在设计将在无头 Windows CE 6.0 设备上运行的应用程序。这个想法是制作一个将在启动时启动并运行直到断电的应用程序。(基本上它看起来像一个服务,但应用程序更容易调试,而无需完全麻烦停止/部署/启动/附加到处理过程)

我担心的是在开发过程中会发生什么。如果我调试/部署应用程序,我看不到以友好和简单的方式关闭它。(请随意建议这是否可以以更好/用户友好的方式完成)我将停止调试器,结果将是 WSACleanup 未被调用。

现在,问题。不调用 WSACleanup 的后果是什么?我可以使用调试器再次启动和运行 winsock 应用程序吗?或者会不会有资源泄漏阻止我这样做?

在此先感谢,杰夫

0 投票
0 回答
821 浏览

windows - 程序退出前是否需要调用WSACleanup

我有一个调用WSAStartup. WSACleanup程序退出前是否需要调用?如果我不这样做,会不会有任何负面影响?特别是:

不同于仅仅exit(0)。我意识到在 Win16 上省略WSACleanup会泄漏系统资源,情况仍然如此。