奇怪的客户端地址返回通过接受(..)功能
问题描述:
我是一个套接字编程新手。这里有一个片段:奇怪的客户端地址返回通过接受(..)功能
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。任何人都可以解释,我做错了什么?
谢谢。
答
检查client_addr.ss_family
- 可以返回一个AF_INET6
家庭住址。
答
您可以显示更多的代码...您尝试连接到什么IP地址/服务?
的线索是在IP地址本身,0.0.0.0,通常其中一个网络接口都没有分配IP地址的情况,可能是在寻找一个DHCP服务器更新/接受来自某处DHCP租约..
由于您没有提供足够的信息,我正在拍摄自己的脚,因此被认为是不公平的,因此得不到满意的结果,因为这个答案不能满足您的问题!
+0
他没有把*连接到*任何东西;他充当服务器并接受连接。 – 2010-03-21 13:41:18
答
只是猜测 - 什么是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 */
}
是的,那是对的。我已经解决了这个问题。还有一个人会兴奋起来。我在提示中使用带AI_PASSIVE的getaddrinfo函数。 我稍后将地址绑定到is ::。好吗? – 2010-03-22 20:12:54
是的,没关系(只要套接字仍然是'AF_INET6')。 – caf 2010-03-22 21:24:08