【问题标题】:Strange things happen when handling http request multithread处理http请求多线程时发生奇怪的事情
【发布时间】:2018-01-15 00:51:34
【问题描述】:

我在写一个简单的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?!

【问题讨论】:

标签: c multithreading sockets httpserver


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    相关资源
    最近更新 更多