首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >程序中的getaddrinfo调用断言

程序中的getaddrinfo调用断言
EN

Stack Overflow用户
提问于 2019-11-12 22:28:07
回答 1查看 1.3K关注 0票数 4

我正在开发一个使用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.

EN

回答 1

Stack Overflow用户

发布于 2020-01-06 16:38:06

这是应用程序中的文件描述符争用。错误9 (EBADF)的典型场景如下所示:

  1. 线程A关闭文件
  2. B调用getaddrinfo并打开Netlink套接字。它碰巧接收到相同的描述符值。
  3. 由于错误,线程A再次关闭相同的文件描述符。通常情况下,这是良性的,但由于并发执行,由glibc创建的Netlink套接字将关闭。
  4. Thread B尝试使用Netlink套接字描述符并接收EBADF错误。

修复这些错误的关键是找出双关闭的确切位置。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58827641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档