#ipv6
#ipv6
Вопрос:
Я написал код для реализации IPv6, используя настройку флага. Флаг должен быть установлен в файле заголовка перед процессом компиляции, если мне нужно включить часть IPv6. Есть ли какой-либо флаг, предоставляемый самим компилятором, чтобы мне просто нужно было использовать инструкцию #ifdef COMPILER_FLAG_FOR_IPV6 для включения части кода IPv6. Если нет, то часть IPv4 скомпилирована. Я не хочу вручную определять флаг здесь, а использовать встроенный флаг для IPV6.
Комментарии:
1. Какая операционная система? Я не могу сказать, что делает Visual Studio, но в операционных системах в стиле Unix компилятор не знает такого рода информации как таковой — для этого существуют autoconf и friends.
Ответ №1:
Совместимость с IPv6 зависит не от поддержки компилятора, а от файлов заголовков, специфичных для конкретной операционной системы. Стандартного способа проверить это как такового не существует. (Как было указано, вы, вероятно, захотите, чтобы CMake / AutoConf / какая-либо другая система сборки обнаружила это).
Вы также можете достичь того, что, по-видимому, ищете более напрямую, например, в Linux вы, вероятно, можете сделать:
#include <sys/socket.h>
#ifdef AF_INET6
....
#endif
Я не уверен, что хотел бы делать ставку на то, насколько это переносимо / надежно, хотя, я бы предположил, что это будет работать с любой реализацией sys/socket.h
, winsock2.h
и при беглом просмотре #define
кажется, что это тоже похоже на AF_INET6
оф-вф.
Комментарии:
1. @awoodland… Здесь, если я использую определенный мной макрос, например #define ENABLEIPv6 1, тогда код работает нормально. Но, если я использую макрос AF_INET6, который определен в sys / socket.h . Даже после включения этого файла заголовка во все места, код выполняется некорректно. Он застревает в части «connect» программирования сокетов. Я что-то упускаю? Пожалуйста, подскажите, если что-то не так или необходимо предпринять какие-либо другие меры.
2. я предполагаю, что вы
#include
где-то пропустили, что означает, чтоAF_INET6
не будет определено, и поэтому вы, возможно, будете смешивать аргументы странным образом.3. @awoodland…. Я проверил все места. Там включен #include <sys/socket.h>. Теперь я не понимаю, в чем может быть причина. Я не понимаю причину, по которой застрял в функции connect.
4. Есть какая-либо информация об отладке? Вывод из strace может быть релевантным / полезным для выяснения причины его зависания.
5. Из трассировок я могу просто подтвердить, что функция connect не работает