修正由于HTTP流式构建应答时,由于真实应答晚于构建应答到达触发的问题

* 原实现在真实应答晚于构建应答到达时,仍然触发流式TCP写操作;
* 现修正为该情况时,直接发送完整的构建应答而不是流式写。
This commit is contained in:
Lu Qiuwen
2018-10-16 20:01:25 +08:00
parent 1fe55d84d3
commit 37b4f3a644
3 changed files with 13 additions and 3 deletions

View File

@@ -87,9 +87,15 @@ static int __write_http_half_to_line(const struct tfe_stream * stream,
* and has been call body_begin, construct the header */
if (hf_private->evbuf_body != NULL && hf_private->write_ctx == NULL)
{
/* Alloc stream write ctx */
hf_private->write_ctx = tfe_stream_write_frag_start(stream, dir);
if (unlikely(hf_private->write_ctx == NULL)) return -1;
printf("frag write start, stream = %p, hf_private = %p\n", stream, hf_private);
/* Still need to send data(not call body_end()), need to write frag start
* Otherwise, means the body is ready, send out directly without frag */
if(hf_private->message_status < STATUS_COMPLETE)
{
hf_private->write_ctx = tfe_stream_write_frag_start(stream, dir);
assert(hf_private->write_ctx != NULL);
}
ret = __write_http_half(hf_private, stream, dir);
if (unlikely(ret < 0)) return ret;