我正在开发一个使用libcurl的程序。程序创建一个线程,然后使用libcurl发出HTTP请求。但有时程序会因错误而崩溃。
netlink描述符上的
意外错误9
在卷曲之后,关闭了AsynchDNS。但问题依然存在。正如我所理解的,断言的原因是getaddrinfo
。也许在多线程应用程序中使用getaddrinfo
需要某种初始化?或者getaddrinfo
通常是非线程安全的?
libcurl版本:
curl 7.67.0 (x86_64-pc-linux-gnu) libcurl/7.67.0 OpenSSL/1.1.0g zlib/1.2.11 libidn2 2/2.0.4发行版-日期: 2019-11-06协议: dict文件ftp ftps gopher http https imap imaps pop3 pop3s rtsp smtps smtps HTTPS tftp功能:HTTPS-代理IDN IPv6大文件libz 11 NTLM_WB TLS
glibc版本:
ldd (Ubuntu 2.27-3ubuntu1) 2.27版权(C) 2018年自由软件基金会,这是免费软件,请参阅复制条件的来源。没有任何保证,即使是适销性或适合某一特定用途。作者: Roland McGrath和Ulrich Drepper.
发布于 2020-01-06 08:38:06
这是应用程序中的文件描述符争用。错误9 (EBADF
)的典型场景如下所示:
getaddrinfo
并打开Netlink套接字。它碰巧接收到相同的描述符值。EBADF
错误。修复这些错误的关键是找出双关闭的确切位置。
https://stackoverflow.com/questions/58827641
复制相似问题