我有一个用C / MFC编写的Windows服务应用程序,它通过Windows套接字 Build HTTP连接 . 它使用WinHttp* APIs来完成所有与套接字相关的操作 . 这一切都很有效,除非有人试图停止/卸载该服务,如果它正在通过套接字进行连接(特别是在无法 Build 此类连接的情况下,例如,如果我的网络电缆被拔掉)那些套接字API在服务关闭之前几秒钟不会返回(显然,服务中的机制等待我的套接字线程完成"gracefully" . )
我的问题是,如果我有一个打开的套接字句柄,以及通过调用WinHttpOpen(),WinHttpConnect()和WinHttpOpenRequest()获得的连接和请求句柄(HINTERNET类型),有没有办法强行制作任何其他WinHttp * API可能正在使用套接字立即返回?
PS . 我想在主线程开始等待套接字线程关闭之前这样做(在卸载/停止服务之前) .
2 回答
您可以从另一个线程关闭WinHTTP句柄 . 这会在您尝试避免的延迟时打破主线程上的阻塞调用 . 见How can a synchronous WinHttp request be cancelled?
[显然,服务中的机制等待我的套接字线程“优雅地”完成] - 如果你知道问题的原因,为什么不删除它?
你为什么等?