将一个超过255个字符的主机名传递给getaddrinfo会导致getaddrinfo失败:内存分配失败原因何在?

时间:2010-05-26 19:39:06

标签: c unix network-programming ipv6

我目前正在升级我们的软件以支持ipv6,同时我将主机名/ IP字段扩展到最大主机名大小。在sun文档中,它似乎可以达到1025(netdb.h:#define NI_MAXHOST 1025 - 这是推荐的主机名分配定义),但是当我将超过255的主机名传递给getaddrinfo时,我得到“getaddrinfo失败:内存分配失败”。我在Sol10盒子上测试。想法?

2 个答案:

答案 0 :(得分:4)

NI_MAXHOST用于getnameinfo(),getaddrinfo()使用MAXHOSTNAMELEN。 (见here),这似乎很难被硬编码 - 而你几乎无能为力。

究竟为什么这些不同我不知道,但参见例如还有here / here有关最大主机名长度的一些信息。

答案 1 :(得分:0)

您别无选择:此限制为255个字符是标准。让我引用RFC 1123,第2.1节:

  

主机软件必须处理最多63个字符的主机名   应该处理最多255个字符的主机名。