【发布时间】:2021-12-10 00:51:09
【问题描述】:
我找到了最后几个错误的部分解决方案,我所做的只是创建一个线程池,而不是创建新线程并在每个连接中杀死它们。现在我没有那些奇怪的错误,但我遇到了下面列出的问题。
我在我的树莓派上使用 C 网络服务器,我能够处理多个网页请求,但是当客户端决定快速重新加载页面时,在几次重新加载后,网络服务器崩溃并且gdb 给了我错误:“broken pipe”。
这是服务器的代码:https://hastebin.com/wuzepotiko.c
我认为问题可能出在读取错误处理上,因为当我使用 gdb 时,它给了我错误:
Thread 13 "webServer" received signal SIGPIPE, Broken pipe.
[Switching to Thread 0xb161f440 (LWP 23260)]
__libc_write (nbytes=0, buf=0x22cc0 <httpResponse>, fd=7)
at ../sysdeps/unix/sysv/linux/write.c:26
26 ../sysdeps/unix/sysv/linux/write.c: No such file or directory.
我知道这是一大堆代码,但我已经坚持了一段时间了。即使有人能指出我正确的方向,我也会非常感激!
【问题讨论】:
-
我建议您使用 C++ 和一些现有的 Web 框架。否则,您最终会遇到支持目录遍历、缓冲区溢出等的服务器。即使使用演示质量sample code from boost 也可以为您提供稳定的起点。请注意我提供的示例 - 它使用单线程方法,因此不要在其中使用阻塞系统调用。
-
"malloc(); unsorted doublelinked list corrupted" 当函数
free()在解除分配后写入内存的元数据损坏时,有时会发生这种情况。例如,在堆溢出的情况下。 Maxim 给了你一个很好的建议,但是,如果你想继续处理你的代码,我可以建议你从 GDB 发布附加信息吗?这会给我们一些线索。 -
@AmineBensalem 我不知道我可以使用调试器。一旦我能得到一些东西,我会在帖子中添加调试信息!
-
@AmineBensalem,我为其中一个错误添加了 gdb 调试信息。希望这会有所帮助。
-
@MaximSagaydachny 我想继续使用我已经拥有的代码,我很确定我将能够找到一种方法来修复目录遍历和缓冲区溢出,但无论如何感谢您的建议!
标签: c sockets raspberry-pi webserver raspbian