Допустим я откуда-то получил struct sockaddr *sa и хочу туда подключиться. В нем у меня из понятного есть только sa_family, то есть AF. connect(2) требует сокет, а socket(2) в свою очередь требует PF.
1. Как в общем получить PF из AF? Про их численное равенство почти на всех платформах знаю, но хочу расовый путь, хотя и подозреваю, что эти фэмили и не подразумевались быть связанными, но исторически не сложилось. Забить на это и сделать socket(sa->sa_family, SOCK_STREAM, 0) — уже сделано.
2. Я так понимаю, что dns-сервер может возвращать записи для всех PF/AF, сам находясь лишь в одной. Отдает ли он на низком уровне полный набор (PF, AF, type, proto) для заданного сервиса, или так же по-тупому отдает только AF+data?