gpt4 book ai didi

c - 带有 sscanf 和线程的 sigpipe

转载 作者:行者123 更新时间:2023-11-30 15:06:40 25 4
gpt4 key购买 nike

描述

我为立方体 2 制作了一个 C 服务器 mod:Sauerbraten https://github.com/deathstar/QServCollect

所有代码都可以在上面的链接中找到

IRC Bot 最终停止在打开的套接字上发送 ping/pong 数据。该进程是线程化的,并且由于主线程是通过 PTHREAD_CREATE_JOINABLE 加入的,因此当 IRC 机器人终止时,它也会终止。这会导致整个服务器崩溃,我只是想调试它。任何帮助将不胜感激。

关键

Ircbot代码:ircbot/ircbot.cpp、ircbot/ircbot.h

主线程:engine/server.cpp

LLDB 调试报告

Process 7933 stopped
* thread #1: tid = 0xa4b8d, 0x00007fff83e4010a libsystem_kernel.dylib`__semwait_signal + 10, queue = 'com.apple.main-thread', stop reason = signal SIGPIPE
frame #0: 0x00007fff83e4010a libsystem_kernel.dylib`__semwait_signal + 10
libsystem_kernel.dylib`__semwait_signal:
-> 0x7fff83e4010a <+10>: jae 0x7fff83e40114 ; <+20>
0x7fff83e4010c <+12>: movq %rax, %rdi
0x7fff83e4010f <+15>: jmp 0x7fff83e3a7f2 ; cerror
0x7fff83e40114 <+20>: retq

服务器日志

PING :NuclearFallout.WA.US.GameSurge.net

SENT: PONG :NuclearFallout.WA.US.GameSurge.net

PING :NuclearFallout.WA.US.GameSurge.net

SENT: PONG :NuclearFallout.WA.US.GameSurge.net

[ OK ] looking up sauerbraten.org...
master server registration failed: failed pinging server
[ OK ] looking up sauerbraten.org...

最佳答案

问题在于函数(特别是 sscanf)数据重载。我需要执行 strlen(buff) 来检查进入函数的数据的缓冲区大小。本质上,它获取的数据远远超出了它的处理能力,最终会因此导致崩溃。

如果您正在实现线程,请确保使用线程安全的实现。

关于c - 带有 sscanf 和线程的 sigpipe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38885451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com