我正在寻找一种简单的方法来测试内核是否支持 Linux 上的 C/C++ 中的 IPv6。 检查 socket() 调用是否失败并且 errno 是否设置为 EINVAL 是否足够?
是的,使用socket(7)是安全的,例如
#include <errno.h>
#include <sys/socket.h>
#include <unistd.h>
int is_ipv6_enabled(void) {
int ret = 0;
#ifdef AF_INET6
int fd = socket(AF_INET6, SOCK_STREAM, 0);
if (fd == -1) {
ret = errno != EAFNOSUPPORT;
} else {
ret = 1;
close(fd);
}
#endif /* AF_INET6 */
return ret;
}