c++ - 使用 C++ for Windows 加速套接字 WinHttp API 终止的方法

标签 c++ winapi sockets winsock winhttp

我有一个用 C++/MFC 编写的 Windows 服务应用程序,它通过 Windows 套接字建立 HTTP 连接。它雇用了WinHttp* APIs做所有套接字相关的操作。一切都很好,除非有人试图停止/卸载该服务,如果它正在通过套接字连接(特别是在无法建立这种连接的情况下,比如,如果我的互联网电缆被拔掉)那些在服务关闭之前,socket API 不会返回几秒钟(显然,服务内部的机制等待我的 socket 线程“优雅地”完成。)

我的问题是,如果我有一个打开的套接字句柄,以及连接和请求句柄(HINTERNET 类型),通过调用 WinHttpOpen()、WinHttpConnect() 和 WinHttpOpenRequest() 获得,有没有办法强制使当前可能正在使用套接字的任何其他 WinHttp* API 立即返回?

附言。我想在主线程开始等待套接字线程关闭之前(在卸载/停止服务之前)这样做。

最佳答案

您可以从另一个线程关闭您的 WinHTTP 句柄。这会以您试图避免的延迟打破主线程上的阻塞调用。参见 How can a synchronous WinHttp request be cancelled?

关于c++ - 使用 C++ for Windows 加速套接字 WinHttp API 终止的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10202164/

相关文章:

windows - Win32 命名管道和消息大小限制 - 旧的 64K 限制是否仍然适用?

.NET 绘制全屏游戏

c - 读取套接字和内存未按预期工作

C: free() 下一个尺寸无效(快)

c# - C++ 到 C#,static_cast 到枚举

c++ - 根据一个 vector 中的值从两个 vector 中删除项目

delphi - 如何在窗口中找到所有文本字段?

c++ - 我的 Linux 应用程序端口在停止时被另一个服务占用

c++ - PrintTheArray 函数不打印

c++ - 如何让 CMake 在 Mac OS X 上使用 GCC 而不是 Clang?