处理http请求多线程时会发生奇怪的事情

时间:2018-01-15 00:51:34

标签: c multithreading sockets httpserver

我正在编写简单的http服务器,首先让我们来看看这部分代码:

static void *connection_handler(void *connection) {
   /* cast the connection */
   Connection *c = (Connection*)connection;
   HttpRequest req;

   char buffer[1024];
   size_t bytes_recv = recv(c->s, buffer, 1024, 0);

   parse_http_request(&req, buffer, bytes_recv);

   printf("Received connection!");
   //printf("%s", buffer);

   /* cleanup */
   krystal_close_socket(c->s);
   free(connection);
   return NULL;
}

这是我的连接处理程序,我将每个连接推送到线程向量,我得到了奇怪的错误。当收到数据的printf被注释时,所有“已接收连接”消息在服务器循环停止后显示(我已设置为在5个连接后停止服务器)但是......当我打印接收数据时,每个连接都有效,缓冲区是打印在每个连接上。 WTF?!

1 个答案:

答案 0 :(得分:0)

好的,当我添加" \ n"并且它开始工作的打印信息,接下来我尝试fflush(stdout)并仍然工作。所以现在我的问题是打印' \ n \字符和fflush(stdout)做同样的事情?