文件描述符用C写数据



我正在使用joyent http解析器和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: %dn", 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实例没有收到任何东西。什么好主意吗?

您的响应不包含数据,只有标头。Curl去掉标题,只打印内容。不仅如此,你还回应了HTTP/1.0,这是一个长的过时的方式。碰巧的是,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

将触发curl打印:

Hello World

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

相关内容

  • 没有找到相关文章

最新更新