【问题标题】:Continue WinHTTP connection after write shutdown写入关闭后继续 WinHTTP 连接
【发布时间】:2010-11-22 15:44:44
【问题描述】:

我正在使用 WinHTTP 将数据发送到 Web 服务器脚本,在某些情况下,我需要服务器终止传入数据(因为它不是必需的),但仍向客户端应用程序返回响应。我在服务器端使用stream_socket_shutdown(STREAM_SHUT_RD) 来结束传入的数据,然后正常发送响应。问题出在 WinHTTP 上,我按预期从 WinHttpWriteData() 收到否定响应并停止发送数据,但是当我调用 WinHttpReceiveResponse() 它返回 false 并且 GetLastError() 返回 ERROR_WINHTTP_CONNECTION_ERROR

有没有办法重置 WinHTTP 的内部错误条件?或者在服务器断开连接后接收响应的其他方式?

谢谢, J

【问题讨论】:

  • 我不认为您可以在 HTTP 请求中间关闭套接字并期望一切正常;我很确定这违反了协议规范。

标签: php c++ windows apache winhttp


【解决方案1】:

如果您从服务器端终止连接,客户端上的接收将失败。这就是 WinHTTP 的工作原理。

您的服务器不能丢弃不需要的传入数据吗?

为什么当服务器期望发送响应时您的客户端仍在发送?在这种情况下,也许可以调整您的 HTTP 使用中隐含的协议,以减少从客户端发送不需要的数据。

【讨论】:

  • 连接并没有完全被杀死,只是读取通道(从客户端写入),我希望这只会导致 WinHttpWriteData() 调用失败,而不是整个连接。服务器可以(并且确实)丢弃不需要的数据,但有时它可能是几 MB,并且首先停止发送数据会更有效。决定是否不需要数据的因素是 HTTP 标头,因此它确实需要立即发回响应。
猜你喜欢
  • 2013-04-24
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
相关资源
最近更新 更多