如何使用libmicrohttpd库让其以chunked模式工作

按照HTTP的协议, 当服务器知道要发送的Content的长度时, 在HTTP头就会生成 Content-Length:xxx 这样的长度信息,

但是有时候我们即使知道长度, 也希望用Chunked模式发送内容, 那要怎么使用?

经过查看libmicrohttpd的源码里有这个关键函数:

static int     try_ready_chunked_body (struct MHD_Connection *connection)

这是chunk模式下专门处理chunk的,仔细看懂这个函数的代码就知道怎么处理chunk模式了。


应用层使用方法如下 :

response = MHD_create_response_from_callback (MHD_SIZE_UNKNOWN/*stbuf.st_size*/, 32 * 1024, &file_reader, file, &free_callback);
if (response == NULL)
{
	fclose (file);
	return MHD_NO;
}
ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
MHD_add_response_header (response, MHD_HTTP_HEADER_TRANSFER_ENCODING, "chunked");
MHD_add_response_header (response, MHD_HTTP_HEADER_CONNECTION, "Keep-Alive");
MHD_destroy_response (response);

回调函数file_reader要如下使用 :

static ssize_t  file_reader (void *cls, uint64_t pos, char *buf, size_t max)
{
    FILE *file = (FILE*)cls;

    (void)  fseek (file, pos, SEEK_SET);
    int n = fread (buf, 1, max, file);

    if (0 == n) 
        return MHD_CONTENT_READER_END_OF_STREAM;
    if (n < 0) 
        return MHD_CONTENT_READER_END_WITH_ERROR;
    return n;
}

这样就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

langeldep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值