文件描述符确实用C写入数据

时间:2015-08-10 06:20:24

标签: c http networking libevent

我正在使用joyent http-parser和lib事件在C中创建我自己的简单Web服务器。

我将它连接到端口并接收HTTP请求,但是,我无法使用套接字发送响应。

所以我在一个窗口输入:

$ curl localhost:5555/a.txt

在我的服务器中,我收到并正确处理了它。我要做到以下几点:

   http_data_cb* message_complete_req_callback(http_parser* parser)
{
    int i;
    http_request_t* http_request = parser->data;
    http_response_t* http_response = generate_response(http_request);
    printf("Writing %d:\n%s", strlen(http_response->full_message), http_response->full_message);
    i = write(http_request->fd, http_response->full_message, strlen(http_response->full_message));
    fsync(http_request->fd);
    printf("Wrote: %d\n", i);
    return 0;
}

打印以下内容:

Writing 96:
HTTP/1.0 200 OK
Tue, 04 Aug 2015 10:20:58 AEST
Server: mywebserver/jnd
Connection: close

Wrote: 96

但是我的curl实例没有收到任何内容。有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您的回复中不包含数据,只包含标题。卷曲剥离标题,只打印内容。不仅如此,您还在回复HTTP/1.0 long 方式已过时。碰巧,Connection: close仅在1.1中有意义,因为1.0不支持保持连接打开。

要让curl报告您需要发送一些内容的任何内容。我希望输出类似于:

Writing 128:
HTTP/1.1 200 OK
Tue, 04 Aug 2015 10:20:58 AEST
Server: mywebserver/jnd
Connection: close
Content-Length: 12

Hello World
Wrote: 128

会触发卷曲打印:

Hello World

请注意,12个字符的内容长度包含换行符的1个字符。内容为Hello World<lf>