就下载 —— 安全下载、无毒手机软件、绿色软件官方下载网站最近更新|下载排行|热门标签|收藏本站

您现在的位置是:就下载 > IT资讯 > 软件教程 > libevent调用evbuffer_add_file卡死问题解决

问题描述:

今天想做一个简单的HTTP服务器,发现libevent使用很方便,就用他的example里的httpserver代码试了下,发现一个问题,就是在打开部分文件时候,服务器会卡住。没有任何返回,浏览器一直处于等待状态。
后来调试后发现,卡死在evbuffer_add_file函数。

源代码如下:

01 /* Otherwise it's a file; add it to the buffer to get

02 * sent via sendfile */

03 const char *type = guess_content_type(decoded_path);

04 if ((fd = open(whole_path, O_RDONLY)) < 0) {

05 perror("open");

06 goto err;

07 }

08 if (fstat(fd, &st)<0) {

09 /* Make sure the length still matches, now that we

10 * opened the file :/ */

11 perror("fstat");

12 goto err;

13 }

14 evhttp_add_header(evhttp_request_get_output_headers(req),

15 "Content-Type", type);

16 evbuffer_add_file(evb, fd, 0, st.st_size);

后经过调试发现,是由于代码第四行中打开文件的方式有问题。缺少O_BINARY标志,导致对于某些包含不可显示或者中文的文件会卡死。
改成如下代码即可:

1 /* Otherwise it's a file; add it to the buffer to get

2 * sent via sendfile */

3 const char *type = guess_content_type(decoded_path);

4 if ((fd = open(whole_path, O_RDONLY|O_BINARY)) < 0) {

5 perror("open");

6 goto err;

7 }

上一篇:宏基ACER 5552G经常重启的原因及解决方案

本文地址:软件教程 >> http://www.9xz.net/it/ruanjianjiaocheng/19037.html

下一篇:安装sql server2008后再安装2005找不到本地服务器的解决方案

  • 打印
推荐阅读
热门专题
推荐内容
热点内容