0

我们在 debian 10、32 位 Linux(AMD) 上使用 3.1.4-2 版本的 libmodbus。

我们正面临“缓冲区溢出错误和核心转储显示如下输出-

#6 0xb6fce11e in __GI___fortify_fail (msg=0xb7044182 "buffer overflow detected") at fortify_fail.c:44
#7 0xb6fcc559 in __GI___chk_fail () at chk_fail.c:28
#8 0xb6fcdffa in __fdelt_chk (d=1138) at fdelt_chk.c:25
#9 0xb7ef4a72 in ?? () from /lib/i386-linux-gnu/libmodbus.so.5
#10 0xb7ef4d82 in ?? () from /lib/i386-linux-gnu/libmodbus.so.5
#11 0x006077f5 in XXX::connectandread() ()
#12 0x0060a3f1 in XXX::XXX(XXXControllerConfiguration, QString, int, DsuDiagnostics*) ()
#13 0x00545955 in WagoThread::run() ()
#14 0xb7417666 in ?? () from /lib/i386-linux-gnu/sse2/libQt5Core.so.5
#15 0xb734afd2 in start_thread (arg=<optimized out>) at pthread_create.c:486
#16 0xb6fbd6d6 in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:108

有了这个,它看起来像是libmodbus在使用select()而不是poll()因为当 FD 计数超过 1024 时应用程序被终止。

我们如何解决这个问题?

我们无法减少 FD 数量,因为我们正在使用一些 3rd 方组件,该组件会为数据库操作打开许多 FD。

libmodbus repo 上存在建议使用 poll 而不是 select 的问题,但它没有提到如何做到这一点。

有解决办法吗?

4

0 回答 0