【问题标题】:Adding support for IPv6 in IPv4 client/server apps - sin6_flowinfo and sin6_scope_id fields?在 IPv4 客户端/服务器应用程序中添加对 IPv6 的支持 - sin6_flowinfo 和 sin6_scope_id 字段?
【发布时间】:2012-01-05 14:23:50
【问题描述】:

我致力于为多个应用程序实现 IPv6 支持,但我想知道这两个字段的用途。这里关于这个的问题很少,所以我不确定我是否正确。

  • 关于范围 ID (sin6_scope_id) - 好吧,Q1Q2Q3Q4 让我了解了范围 ID,我想我明白了。因此,我必须再添加一个配置参数,以使 scope-id 可配置。 (我决定在这里添加这个,以防有人对此感兴趣)。很快 - 范围 ID 是唯一确定应该处理流量的设备所必需的 - 因为可能有多个接口,具有相同的 IP,但具有不同的(接口?)ID。到目前为止,一切顺利。
  • 但是“流量信息”(sin6_flowinfo)呢?
    • 它有什么用?我找不到任何有趣的东西。我阅读了RFC,但它对我没有任何帮助。
    • sin6_flowinfo 是否有一些可能的值(比如 - 几个值,比如标志,这意味着什么),或者就像 sin6_scope_id - 可能是任何值,取决于设备,我正在尝试连接到?
    • 我应该完全担心它,还是我直接离开它0(如Beej's Guide to Network Programming是的,我试过了,它有效,但我不确定如果它仅在这种情况下有效(如果它取决于某些网络配置),或者它始终有效,如果它设置为0
    • 或者,也许,我应该让它可配置,我的意思是 - 添加一个配置选项并让用户定义它的值?
    • google-ing "sin6_flowinfo" 给了我结构定义和手册页,这个字段没有任何用处。有什么有趣的来源吗? (可以理解的……不是 RFC :D)

编辑:好吧,在@glglgl 的回答和提示之后,sin6_flowinfo 可能已过时,我发现了一些有趣的来源:RFC: IPv6 Flow Label SpecificationIETF draft: Flow Label as Transport-Layer NoncePractical guide for solariswikipedia .
该字段并没有过时(或者我找不到这样的来源,这证实了这一点),但它看起来像 0,因为值足够好。

【问题讨论】:

  • 我删除了关于否决票的评论 - 这是一个非常好的问题,不用担心。

标签: c sockets network-programming ipv6


【解决方案1】:

最好的方法是使用getaddrinfo()

伪代码:

struct addrinfo *restrict hints = { .ai_family = AF_UNSPEC, .ai_socktype = SOCK_STREAM };
struct addrinfo * res, r;
if (0 == getaddrinfo("foo.bar.baz", "http", &hints, &res)) {
    for (r=res; r; r=r->ai_next) {
        sock = socket(r->ai_family, r->ai_socktype, r->ai_protocol);
        connect(sock, r->ai_addr, r->ai_addrlen);
        if error: continue
        break
    }
}
freeaddrinfo(res);

这将为您解决sin6_scope_id的问题;通常是0,除非你有像fe80::1234:56ff:fe78:9abc%eth2 这样的本地链接地址。这个eth2 被转换为正确的范围ID。

sin6_flowinfo 已过时 (AFAIK),因此在生成的 struct addrinfo's ai_addr 中设置为 0。

【讨论】:

  • 是的,我知道这个选项并且我已经添加了它,但是我想增加手动设置每个选项的可能性。我坚持sin6_flowinfo。稍后我会阅读有关sin6_flowinfo 的链接,但如果它已过时并且我可以将其保留为0,那将是完美的。再次感谢:)
  • 好吧,我找不到相关的来源,它说它已经过时了,但我同意 0 的价值。我发现了一些有趣的链接,我将在我的问题中发布这些链接,以接受您的链接,而不是发布我自己的链接。感谢您的帮助。
  • @KirilKirov 你说得对:它与过时完全相反:他们还不知道如何处理它;-)
  • 完全正确 - 最好的定义 - “他们还不知道如何处理它” :D:D 我喜欢它! :D
猜你喜欢
  • 2020-08-27
  • 2016-06-10
  • 2010-11-20
  • 2014-03-07
  • 2012-04-08
  • 1970-01-01
  • 2019-05-16
  • 2020-09-19
  • 1970-01-01
相关资源
最近更新 更多