Chrome响应后关闭TCP连接

时间:2016-12-10 14:46:58

标签: c google-chrome http firefox tcp

我有这个代码处理一些非常基本的http请求。我希望它支持持久连接。如果我通过firefox请求某些页面,会话/连接将被重用为indended。但是,Chrome会在每个请求/响应后关闭连接,而不管是否包含 Connection:keep-alive 标头。

这是打算还是我的读/写循环错了?

#include<sys/socket.h>

// some setup code

listen(sockfd, 5);

// accept new connections
while (true) {
  int session_sock_fd = accept(sockfd, (struct sockaddr*)&cli_addr, &clilen);
  if (newsockfd < 0) {
    // error
  } else {
    // create session
  }

// session main loop, each session runs in its own thread
while(true) {
  int n = read(session_sock_fd, buffer, buffer_size);
  if (n < 0) {
    // connection time out or some error
    break;
  } else if (n == 0) {
    break; // client has closed the conneciton
  }

  // parse the request

  // send response
  char* resp_data = "HTTP/1.1 200 OK\r\nConnection: keep-alive\r\n"
                    "Content-Length: xxx\r\nDate: some  date\r\n\r\n"
                    "response_body\r\n";
  n = write(session_sock_fd, resp_data, size);
  if (n < 0) {
    // error, unable to write to socket
    break;
  }
}

1 个答案:

答案 0 :(得分:0)

似乎我的问题是,当我计算内容长度时,我没有包含最后的“\ r \ n”。它似乎现在正在运作!