Kir*_*rov 8 c c++ unix sockets network-programming
您可以强制它在ai_family字段中使用IPv4或IPv6,或将其保留为AF_UNSPEC以使用任何内容.这很酷,因为您的代码可以与IP版本无关.
正如标题所说 - 总是使用的缺点(或风险,如果有的话)AF_UNSPEC,而不是指定IPv4或IPv6?
或者只是出于一个原因 - 如果指定了版本,这将保证只支持此版本吗?
一点背景 - 我考虑在客户端 - 服务器(C++)应用程序中添加对IPv6的支持,并且应该支持这两个版本.所以我想知道它是否可以使用,AF_UNSPEC或者最好"识别"字符串中的地址并使用AF_INET6或AF_INET取决于地址.
您必须区分客户端和服务器应用程序。
在客户端,这很容易:只需getaddrinfo()按顺序调用并尝试每个答案,直到获得连接。
在服务器上,事情有点难:
即使在服务器上,getaddrinfo()也可以使用。在那里你使用AI_PASSIVE提示中的标志。然后你就会得到结果。关于这些,你必须听,也许启用IPV6_V6ONLY标志。
accept()应该以非阻塞方式完成或使用select()或poll()(不确定后者是否可能)。