我致力于为多个应用程序实现IPv6支持,但我想知道这两个字段是什么。关于这一点的问题很少,所以我不确定我做对了。
sin6_scope_id
) - 好吧,Q1,Q2,Q3和Q4让我了解了范围ID,我想我明白了。因此,我必须添加一个配置参数,以使scope-id可配置。 (我决定在这里添加,以防有人对此感兴趣)。短时间 - 范围ID是唯一确定哪个设备应该处理流量所必需的 - 因为可能有多个接口,具有相同的IP,但具有不同的(接口?)ID。到目前为止,这么好。sin6_flowinfo
)
sin6_flowinfo
是否有一些可能的值(比如 - 几个值,如旗帜,这意味着什么),或者像sin6_scope_id
- 可能是任何值,具体取决于设备,我试图连接到?0
(如Beej's Guide to Network Programming中所示。而是,我试过,它有效,但我和#39;我不确定它是否仅适用于这种情况(如果它取决于某些网络配置),或者如果它设置为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
,因为价值足够好。
答案 0 :(得分:6)
最好的方法是使用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。