仅在某些系统上出现 Asio 错误文件描述符

Asio Bad File Descriptor only on some systems

最近我使用 sleepy-discord 机器人库用 C++ 编写了一个 Discord-Bot。 现在,这里的问题是,当我 运行 机器人时,它向我显示以下错误:

[2021-05-29 18:30:29] [info] Error getting remote endpoint: asio.system:9 (Bad file descriptor)
[2021-05-29 18:30:29] [error] handle_connect error: Timer Expired
[2021-05-29 18:30:29] [info] asio async_shutdown error: asio.ssl:336462100 (uninitialized)

现在,我广泛搜索了这可能由什么触发,但答案总是说没有打开套接字等等。 问题是,它适用于很多系统,但昨天我租了一台 VM(与我的计算机相同的系统),这似乎是唯一给我这个问题的。

这可能是什么原因?

编辑:我被指示展示一个可重现的示例,但我不确定我将如何编写一个最小的示例,这就是为什么我 link 有问题的机器人: https://github.com/ElandaOfficial/jucedoc

更新:

我对我正在使用的库进行了一些修改,并且能够提高 Websocketpp 日志级别,谢天谢地,我从中得到了更多信息:

[2021-05-29 23:49:08] [fail] WebSocket Connection Unknown - "" /?v=8 0 websocketpp.transport:9 Timer Expired

当您 s.remote_endpoint 在不再 connected/no 连接的套接字上时触发错误。

它会发生,例如当您尝试在 IO 错误后使用套接字打印端点时。通常的解决方法是在建立连接后立即存储远程端点的副本,这样您就不必在为时已晚时检索它。

关于为什么它会在特定 VM 上发生的问题,您必须将注意力转移到根本原因上。可能是 accept 失败了(可能是由于文件描述符数量、可用内存等限制)