我致力于为多个应用程序实现 IPv6 支持,但我想知道这两个字段有什么用。这里关于这个的问题很少,所以我不确定我是否做对了。
- 关于作用域 ID (
sin6_scope_id
) - 嗯,Q1 , Q2 , Q3和 Q4让我了解范围 ID,我想我明白了。因此,我必须再添加一个配置参数,以使 scope-id 可配置。 (我决定在这里添加这个,以防有人对此感兴趣)。很快 - 范围 ID 是唯一确定哪个设备应该处理流量所必需的 - 因为可能有多个接口(interface),具有相同的 IP,但具有不同的(接口(interface)?)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 Specification , IETF draft: Flow Label as Transport-Layer Nonce , Practical guide for solaris和 wikipedia .
该字段并没有过时(或者我找不到这样的来源,这证实了这一点),但它看起来像 0
因为值足够好。
最佳答案
最好的方法是使用 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 .
关于c - 在 IPv4 客户端/服务器应用程序中添加对 IPv6 的支持 - sin6_flowinfo 和 sin6_scope_id 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8256671/