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

标签 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;
}

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

最佳答案

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

关于c - 多线程处理http请求时会发生奇怪的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48255689/

相关文章:

C语言cygwin编译器,不知道为什么会发生这种情况

c - 如何使用 WatCom 生成带有声明的段偏移量的 RAW BIN

multithreading - 在Python程序中设计并发

java - java中的多个并行线程不会终止

c# - 我如何在同一端口上同时使用套接字发送和接收

c - 在服务器上存储微小数据的最快方法

c# - 在 C# 中安全回显 MIDI 数据

sockets - Perl 6 支持来自 IO::Socket::INET 的 udp 协议(protocol)

java - 新套接字连接时线程被覆盖(服务器/客户端)多线程java

c - 用 C 扩展 Go 编程语言,转换数据类型