2011-11-24 16 views
19

Tôi làm việc để triển khai hỗ trợ IPv6 cho một số ứng dụng, nhưng tôi tự hỏi 2 trường này là gì. Có rất ít câu hỏi về điều này ở đây vì vậy tôi không chắc tôi đã đúng.Thêm hỗ trợ cho IPv6 trong ứng dụng khách/máy chủ IPv4 - các trường sin6_flowinfo và sin6_scope_id?

  • Về phạm vi ID (sin6_scope_id) - tốt, Q1, Q2, Q3Q4 đã cho tôi ý tưởng về phạm vi ID và tôi nghĩ rằng tôi nhận được nó. Vì vậy, tôi sẽ phải thêm một tham số cấu hình nữa, để làm cho cấu hình phạm vi-id. (Tôi quyết định thêm vào đây, trong trường hợp ai đó quan tâm đến điều này). ID phạm vi ngắn là cần thiết để xác định duy nhất đó là thiết bị, cần xử lý lưu lượng - bởi vì có thể có một số giao diện, với cùng một IP, nhưng với ID (giao diện) khác nhau. Càng xa càng tốt.
  • Nhưng làm thế nào về "dòng chảy thông tin" (sin6_flowinfo)
    • nó là cái gì? Tôi không thể tìm thấy bất cứ điều gì thú vị về điều đó. Tôi đọc các RFC nhưng nó đã không giúp tôi cả.
    • Có một số giá trị có thể cho sin6_flowinfo (như - một số giá trị, như cờ, có nghĩa là gì đó) hoặc giống như sin6_scope_id - có thể là bất kỳ giá trị nào, tùy thuộc vào thiết bị, tôi đang cố gắng kết nối?
    • Tôi có nên lo lắng về điều đó hay không, hoặc tôi chỉ cần để nó 0 (như trong Beej's Guide to Network Programmingyes, tôi đã thử nó hoạt động, nhưng tôi không chắc liệu nó có hoạt động chỉ trong trường hợp này hay không nó phụ thuộc vào một số cấu hình mạng), hoặc nó sẽ luôn luôn hoạt động, nếu nó được đặt thành 0?
    • Hoặc, có lẽ, tôi nên làm cho nó có thể cấu hình được, ý tôi là - thêm một tùy chọn cấu hình nữa và cho phép người dùng xác định giá trị của nó?
    • google -ing "sin6_flowinfo" cung cấp cho tôi định nghĩa cấu trúc và trang người đàn ông, không có gì hữu ích về trường này. Bất kỳ nguồn thú vị nào? (Có thể hiểu được..không RFC: D)

EDIT: Vâng, sau câu trả lời @glglgl 's và sau khi gợi ý, rằng sin6_flowinfo có thể lỗi thời, tôi thấy một số nguồn tin thú vị: RFC: IPv6 Flow Label Specification, IETF draft: Flow Label as Transport-Layer Nonce, Practical guide for solariswikipedia.
Trường không lỗi thời (hoặc tôi không thể tìm thấy nguồn như vậy, xác nhận điều này), nhưng có vẻ như 0 là giá trị đủ tốt.

+1

Tôi đã xóa bài bình luận về downvotes - đó là một câu hỏi hoàn hảo, đừng lo lắng về nó. – caf

Trả lời

6

Cách tốt nhất để sử dụng là sử dụng getaddrinfo().

Pseudo code:

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); 

này sẽ đưa những lo lắng về sin6_scope_id từ bạn; thường là 0, trừ khi bạn có địa chỉ liên kết địa phương như fe80::1234:56ff:fe78:9abc%eth2. Điều này eth2 được chuyển đổi thành ID phạm vi chính xác.

sin6_flowinfo đã lỗi thời (AFAIK) và do đó đặt thành 0 trong kết quả struct addrinfo's ai_addr của bạn.

+0

Vâng, tôi biết tùy chọn này và tôi đã thêm nó, nhưng tôi muốn thêm khả năng để thiết lập thủ công mọi tùy chọn. Và tôi bị mắc kẹt trên 'sin6_flowinfo'. Tôi sẽ đọc liên kết về 'sin6_flowinfo' sau, nhưng nếu nó lỗi thời và tôi có thể để nó lại' 0', nó sẽ là hoàn hảo. Cảm ơn một lần nữa :) –

+0

Vâng, tôi không thể tìm thấy một nguồn có liên quan, mà nói, nó đã lỗi thời, nhưng tôi đồng ý với giá trị '0'. Tôi tìm thấy một số liên kết thú vị, mà tôi sẽ đăng trong câu hỏi của tôi, để chấp nhận của bạn, thay vì gửi bài của riêng tôi. Cảm ơn đã giúp đỡ. –

+1

@KirilKirov Bạn nói đúng: nó hoàn toàn trái ngược với lỗi thời: Họ không biết chính xác phải làm gì với nó ;-) – glglgl

Các vấn đề liên quan