问题标签 [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.
sockets - WSAStartup 和 WSACleanup 的成本是多少?
我有一个 c++ win32 程序,它使用套接字从服务器下载一些数据。
在 Windows 上使用套接字之前,必须调用 WSAStartup。MSDN 说:“每次成功调用 WSAStartup 都必须调用 WSACleanup。只有最终的 WSACleanup 函数调用执行实际的清理。”
对我来说最简单的方法是每次从服务器下载数据时调用 WSAStartup/WSACleanup。大多数情况下,一次只有一个连接,因此 WSACleanup 将执行实际的清理。
这就是为什么我想知道 WSAStartup 和 WSACleanup 的成本是多少?我的意思是执行实际的清理。如果与整个套接字连接相比,对 WSAStartup 和 WSACleanup 的调用只持续很短的时间,那么我可以使用简单的方法。如果没有,我应该注意仅在退出程序时调用 WSACleanup。
c++ - WSACleanUp 导致异常
我的应用程序可以在串行和套接字连接之间切换,但不能同时打开。因此,当我尝试在 Socket 和 Serial 之间切换时,我删除了 Socket 连接。
基于套接字的对象使用一个名为 UsesWinsock 的私有类(在这里向Len Holgate大声喊叫,因为它基本上是他的代码(实际上是 RAII,但我从未将它应用于 WSA,直到我看到他这样做))。这只是调用 WSAStart 和 WSACleanUp。
当 WSACleanUp 被调用时,它会进入 NTDLL 和汇编程序。@err,hr 给我“传递给系统调用的数据区域太小”作为 HRESULT。
我尝试过移动代码:按照继承顺序移动类会导致破坏序列发生变化,并且实际上破坏了函数,因此它们是破坏序列中最后被调用的东西。都没有奏效。
我很确定我已经释放了所有分配的东西(只有 1 个套接字和几个事件)并且我被卡住了 - 这对我来说是一个相当重要的问题。
有什么建议么?
c++ - WSACleanup 和 atExit
可以通过 atExit 函数注册 WSACleanup 吗?我们有几个应用程序可以在代码中的不同点终止,因此我们希望避免将 WSACleanup 放在代码中的任何地方。目前我们通过 DllMain 调用 WSAStartup / WSACleanup,因为我们有一个所有这些应用程序都使用的 dll。但是,Microsoft 严格建议不要通过 DllMain 使用 WSAStartup / WSACleanup,因为这会导致死锁。我们可以将 WSAStarup 移出 DllMain,并在所有应用程序访问 Windows 套接字库之前在代码中的某一点调用它。而且,一旦我们调用 WSAStartup,我们就想使用 atExit 函数来注册对 WSACleanup 的调用。有没有人有这种方法的经验?谢谢!
c++ - Windows 套接字 WSACleanup C++
我在我的程序上使用套接字。由于我添加了WSAStartup
. 我的应用程序运行良好(一直到收到停止信号为止)。收到信号后,它停止了一个问题,即如果我WSACleanup
在程序末尾编写函数,它会崩溃,如果我删除它,它会正常终止。
谢谢
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?
c - Windows 套接字错误代码 10055
我开发了一个在 Windows 上使用套接字的应用程序。它运行良好,但一段时间后,互联网连接开始失败,最后我收到此错误(10055),这意味着我的应用程序缓冲区空间不足。
实际上,我认为我只使用了 2 个套接字和我自己编写的代码,但确实我使用的是第 3 方库,我不知道它是如何实现的。
我读过很多关于这个麻烦的文献,所以我不是唯一一个遭受它的人,但我不知道如何解决它,或者至少绕过它,因为当它失败时,它会导致我的电脑失去了互联网连接。我已经通过捕获此错误进行了尝试,当它发生时WSACleanup()
,WSAStartup()
即使它不是最佳实践,也会执行 a ......但我的应用程序仍然会陷入此错误。
任何建议将不胜感激。
c++ - 由于 WSACleanup,sql server has gone away 错误
我想寻求帮助,因为我不知道该怎么办了。我有一个用 c++ 创建的模拟器,它接受来自用户的 id 输入并检查它是否在仅在本地主机中的数据库中(在 mysql 工作台中创建)。
问题是模拟器连接到另一台用作服务器的计算机(通过winsock连接)。如果服务器启动,它可以正常工作或者如果所有输入都错误,但是如果服务器关闭(我的代码将尝试再次连接到服务器 pc,所以我必须调用 WSACleanup)在输入一个正确的值并输入后另一个 mysql_query 返回 mysql 服务器已消失的错误。然后程序会在转到 mysql_num_rows 时中断。
我在另一个函数中有这段代码,当我将它们一个一个注释掉时,我发现错误是由于 WSACleanup() 引起的。如果 WSACleanup 行不存在,我的查询运行正常。
我希望有人可以帮助我。
c++ - 对 WSACleanup() 的错误调用会杀死 WSAStartup()
我有运行 TCP 服务器的应用程序。要初始化 TCP,我运行WSAStartup()
. 然后我需要加载第三方dll。Dll 也做一些 TCP 工作并且有一些错误 - 它运行WSACleanup()
而不运行WSAStartup()
。这个错误会阻止我的 TCP 服务器,因为 dll 会WSACleanup()
杀死它。
我无法修复dll。如何避免这种情况。看起来在不同线程中运行使用 dll 和我的 TCP 服务器没有帮助
windows-ce - 不调用 WSACleanup 的后果
我正在设计将在无头 Windows CE 6.0 设备上运行的应用程序。这个想法是制作一个将在启动时启动并运行直到断电的应用程序。(基本上它看起来像一个服务,但应用程序更容易调试,而无需完全麻烦停止/部署/启动/附加到处理过程)
我担心的是在开发过程中会发生什么。如果我调试/部署应用程序,我看不到以友好和简单的方式关闭它。(请随意建议这是否可以以更好/用户友好的方式完成)我将停止调试器,结果将是 WSACleanup 未被调用。
现在,问题。不调用 WSACleanup 的后果是什么?我可以使用调试器再次启动和运行 winsock 应用程序吗?或者会不会有资源泄漏阻止我这样做?
在此先感谢,杰夫
windows - 程序退出前是否需要调用WSACleanup
我有一个调用WSAStartup
. WSACleanup
程序退出前是否需要调用?如果我不这样做,会不会有任何负面影响?特别是:
不同于仅仅exit(0)
。我意识到在 Win16 上省略WSACleanup
会泄漏系统资源,情况仍然如此。