我有一个用 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/