免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2393 | 回复: 5
打印 上一主题 下一主题

linux 下取客户端 ip 存在的问题?(已解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-29 15:33 |只看该作者 |倒序浏览
我在linux 下服务器端 取客户端 IP
accept 后,获得为空
调用 getpeername 函数获得也为空

但是 SERVER和CLIENT 可以正常通信

请各位指教,可能是什么原因


我真是笨蛋一个!
内核配置时选了ipv6
去地址时我却以ipv4的格式来取,真是笨蛋到家了!

[ 本帖最后由 yd0412 于 2007-6-5 16:17 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-05-30 20:11 |只看该作者
可以把源代码拿过来参考下么?

论坛徽章:
0
3 [报告]
发表于 2007-06-04 08:58 |只看该作者
难道是人品问题?:wink: :wink: :wink:

瓜瓜,帮你顶下,这个问题不简单啊~~~~~~~~~~~~~~~~~~~~~~~

论坛徽章:
0
4 [报告]
发表于 2007-06-04 09:16 |只看该作者

回复 #2 xiexbb 的帖子

源码 很大!
我 跟踪到内核 源码,发现内核源码中就没有 取得,所以传到 用户态 就没有

sys_accept 中 就没有

具体原因 未知

论坛徽章:
0
5 [报告]
发表于 2007-06-04 13:10 |只看该作者
可以看看我的代码。
void GetAddrPort(int sock, string& localip,string& localport, string& remoteip,string& remoteport)
{
    struct sockaddr_in sa;
    socklen_t len;
    char tmp[32];

    len = sizeof(sa);
    getsockname(sock, (struct sockaddr*)&sa, &len);
    localip   = inet_ntop(AF_INET, &(sa.sin_addr), tmp, sizeof(tmp));
    localport = Int2Str(ntohs(sa.sin_port));

    getpeername(sock, (struct sockaddr*)&sa, &len);
    remoteip  = inet_ntop(AF_INET, &(sa.sin_addr), tmp, sizeof(tmp));
    remoteport= Int2Str(ntohs(sa.sin_port));
}

论坛徽章:
0
6 [报告]
发表于 2007-06-04 14:58 |只看该作者
原帖由 lemboyz 于 2007-6-4 13:10 发表于 5楼  
可以看看我的代码。
void GetAddrPort(int sock, string& localip,string& localport, string& remoteip,string& remoteport)
{
    struct sockaddr_in sa;
    socklen_t len;
    char ...


谢谢了!
我 getpeername / getsockname 取得位 0.0.0.0

accept 后,也为 0.0.0.0

linux下 , 打印跟踪到 内核源码 ,发现 sys_accept 中 ,调用 newsock->ops->getname(),此函数 好像未执行

所以 不知道什么原因

我用 valgrind 内存管理工具测试了,不存在内存泄露的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP