首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的ip_address[]会被覆盖?

为什么我的ip_address[]会被覆盖?
EN

Stack Overflow用户
提问于 2011-06-26 06:08:13
回答 2查看 267关注 0票数 1

我正在尝试编写服务器/客户端代码,一切都正常工作,但当我尝试存储传入和传出连接的IP地址时除外。

代码语言:javascript
复制
getpeername(new_fd[client],(struct sockaddr*) &client_addr[client],&addr_size);
ip_address[client] = inet_ntoa(client_addr[client].sin_addr);

在这种情况下,当建立连接时,每个索引的内容将被更改为所建立的最新连接。因此,ip_address[]的每个单元都将包含最后一个连接的IP地址。问题会是什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-26 06:17:49

inet_ntoa通常看起来像这样:

代码语言:javascript
复制
char *
inet_ntoa(struct in_addr ina)
{
    static char buf[some_size];
    /* a series of sprintfs */
    return bufl
}

这意味着在每次调用时,buf的内容都将被重写。显然,您不能直接使用inet_ntoa的返回值;您必须使用memcpy或类似的东西。

真正的解决方案

请改用inet_ntop。它比较新,开箱即支持IPv6,而且应该是线程安全的(哦,对了,inet_ntoa不是)。

票数 4
EN

Stack Overflow用户

发布于 2011-06-26 06:10:22

inet_ntoa不分配。它返回一个静态缓冲区。如果您想保留字符串,则需要将其复制到您自己的存储中。

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

https://stackoverflow.com/questions/6480822

复制
相关文章

相似问题

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