奇怪的客户端地址通过accept(..)函数返回

时间:2010-03-21 13:27:23

标签: linux sockets network-programming

我是一个socket编程新手。这是一个片段:

struct sockaddr_storage client_addr;

...

client_addr_size = sizeof(client_addr);
client_socket = accept( server_socket,
    (struct sockaddr *)&client_addr, &client_addr_size );

...

result = inet_ntop( AF_INET,
    &((struct sockaddr_in *)&client_addr)->sin_addr,
    client_addr_str, sizeof(client_addr_str) );

我是一名服务员。每当客户端连接地址时,无论主机是什么,我得到的都是0.0.0.0。谁能解释一下,我做错了什么?

感谢。

3 个答案:

答案 0 :(得分:2)

检查client_addr.ss_family - 它可能会返回AF_INET6家庭住址。

答案 1 :(得分:0)

您可以显示更多代码...您尝试连接的IP地址/服务是什么?

线索在IP地址本身,0.0.0.0,通常是网络接口没有分配IP地址的情况,可能正在寻找DHCP服务器来从某个地方续订/接受DHCP租约。

由于你没有提供足够的信息,因为我没有提供足够的信息,所以我认为这样做是不公平的,并且由于这个答案不能满足你的问题而被投票结果!

答案 2 :(得分:0)

只是一个猜测 - client_addr_str的声明是什么?如果它是char*,则sizeof(client_addr_str)将返回指针的大小(4或8,具体取决于32位或64位平台。)请尝试以下操作:

char client_addr_str[INET_ADDRSTRLEN];
if ( inet_ntop( AF_INET,
    &((struct sockaddr_in *)&client_addr)->sin_addr,
    client_addr_str, INET_ADDRSTRLEN ) == NULL )
{
    /* complain */
}