是否确认getnameinfo内存泄漏
Is getnameinfo memory leaking confirmed?
根据问题,我遇到了一些内存泄漏getnameinfo。我正在使用Ubuntu 12.04 (Linux scv 3.2.0-35-generic #55-Ubuntu SMP Wed Dec 5 17:42:16 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux)与gcc 版本4.6.3。我链接我的服务器可执行文件与g++,到目前为止,valgrind还没有报告一个问题。然后我添加了一个简单的调用getnameinfo来打印连接客户端的网络名称和端口。
得到如下结果:
我做错了什么?
代码简单如下:
struct sockaddr addr;
socklen_t addr_sz = sizeof(addr);
char host[NI_MAXHOST],
serv[NI_MAXSERV];
int infd = accept(srv_fd, (struct sockaddr*)&addr, &addr_sz);
if (infd == -1) {
... manage error on accept ...
}
if(getnameinfo((struct sockaddr *)&addr, addr_sz, host, NI_MAXHOST, serv, NI_MAXSERV, NI_NUMERICSERV)) {
strncpy(host, "<unknown host>", NI_MAXHOST-1);
strncpy(serv, "<unknown port>", NI_MAXSERV-1);
}
这就是泄漏…
我可以确认,泄漏是发生:对于连接的6个客户端,valgrind发现60字节泄漏(我猜客户端是从同一主机连接的,所以如果它与主机名有关,则增长如预期的那样呈线性)。任何想法?
欢呼
最终发现真正的泄漏
当连接到服务器套接字时,使用name.local
代替localhost
和/或完全限定名。getnameinfo()
会泄漏。
我可以在12.04
, 12.10
上重现x64和x86上的错误。如果我在名称上指定.local
连接,它会泄漏。
欢呼
相关文章:
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- 析构函数 C++ 使泄漏内存
- 构造函数对象赋值是否泄漏内存
- corba :: orb_init泄漏内存
- Gmock泄漏内存
- 如何在不泄漏内存的情况下删除链接列表
- Visual C ODBC关闭记录集泄漏内存
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- OpenGL正在泄漏内存.哪个对象未释放
- 可以std ::退出泄漏内存
- uiautomation findall泄漏内存
- 为什么在此OpenCL代码中泄漏内存,为什么要泄漏内存
- pthread在完成后会泄漏内存
- win32 标准::线程泄漏内存
- 返回指向同一变量的指针是否会泄漏内存
- 使用clectType(new any_type())可能会泄漏内存泄漏
- Windows开发:如何确定我的应用程序是否正在泄漏内存
- WinHttp打开泄漏内存