Как определить, не поддерживает ли маршрутизатор / интернет-провайдер пользователя соединения IPv6? - PullRequest
1 голос
/ 14 июня 2011

Я использую сокеты BSD, и хотя я думаю, что легко определить, поддерживает ли пользователь ОС IPv6 (пытаясь создать сокет с AF_INET6), я не уверен, как программно определить если их роутер или провайдер не поддерживает такое соединение. Будет ли просто сбой соединения, и если да, как мне отличить этот сбой от сервера, который просто находится в автономном режиме?

Ответы [ 4 ]

1 голос
/ 14 июня 2011

Как говорит Ульрих Дреппер в своем Введение в программирование на IPv6-уровне , вам следует вызвать getaddrinfo с установленным флагом AI_ADDRCONFIG (который гарантирует, что вы получите только те типы адресов, которые в настоящий момент сконфигурированы в системе), затем пробуйте каждый результат по порядку до тех пор, пока один из них не преуспеет (так как результаты отсортированы, с наиболее вероятным первым, и т. д.) или все не получится.

1 голос
/ 14 июня 2011

В этом посте содержится много полезной информации по этому вопросу, и в частности говорится о getaddrinfo предоставлении такой информации.

0 голосов
/ 14 июня 2011

Большинство людей с настроенными общедоступными маршрутизируемыми адресами (не fe80 :: / 10 fc00 :: / 7 и друзьями) и маршрутом по умолчанию ipv6 должны быть подключены.

Однако обычно вам не следуетпозаботьтесь о том, заключается ли проблема в том, что сервер недоступен одним конкретным способом по сравнению с недоступностью по другой причине.

0 голосов
/ 14 июня 2011

Одной из идей будет включение нескольких тестовых серверов настолько высокого «качества», насколько можно себе представить.Я думаю, что Google доступны через IPv6, например, и они продолжают работать.Добавьте еще 4-5, и у вас должна быть довольно низкая вероятность того, что все они одновременно упадут.

...