2011-11-24 37 views
19

我正在为几个应用程序实现IPv6支持,但我想知道这两个字段是什么。关于这方面的问题很少,所以我不确定我是否正确。在IPv4客户端/服务器应用程序中添加对IPv6的支持 - sin6_flowinfo和sin6_scope_id字段?

  • 关于作用域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,因为值已足够好。

+1

我删除了有关do​​wnvotes的评论 - 这是一个非常好的问题,不用担心。 – caf

回答

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。

+0

是的,我知道这个选项,我已经添加了它,但我想增加手动设置每个选项的可能性。我坚持'sin6_flowinfo'。稍后我会阅读关于'sin6_flowinfo'的链接,但是如果它已经过时并且我可以将其保留为'0',那将是完美的。再次感谢:) –

+0

嗯,我找不到一个相关的来源,它说,它已经过时了,但我同意'0'值。我发现了一些有趣的链接,我将在我的问题中发布,接受你的链接,而不是发布自己的链接。谢谢您的帮助。 –

+1

@KirilKirov你是对的:这与过时完全相反:他们还不知道如何处理它;-) – glglgl

相关问题