postfix + libinet6
Arkadiusz Miskiewicz
misiek w pld.ORG.PL
Pon, 20 Sie 2001, 21:47:50 CEST
Jakub Bogusz <qboosh w prioris.mini.pw.edu.pl> writes:
> Wygląda na to, że problemy posfiksa z IPv6 wynikają ze sposobu
> działania libinet6. Np. w czymś takim:
>
> + memset(&hints, 0, sizeof(hints));
> + hints.ai_family = PF_UNSPEC;
> + hints.ai_socktype = SOCK_STREAM;
> + hints.ai_flags = AI_PASSIVE;
> + error = getaddrinfo(NULL, "0", &hints, &res0);
>
> getaddrinfo() zwraca adresy IPv6 pomimo braki obsługi v6 w jądrze.
I to jest to co getaddrinfo() powinno robić.
> Nie da się jakoś inaczej dodać v6 do postfiksa - bez tej biblioteki
> (tzn. dać to się na pewno da, ale o ile więcej roboty)?
Da się ale będzie to problematyczne (brak getifaddrs() w glibc).
> Albo chociaż nie traktować błędów z adresami v6 jako "fatal"?
Praktykowana polityka dotycząca getaddrinfo() to:
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
getaddrinfo(NULL, ..., &hints, &res0);
for (res = res0; res; res = res->ai_next) {
s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if (s < 0) {
if (res->ai_next)
continue;
else {
error jak diabli
exit(1);
}
}
if (bind(s, res->ai_addr, res->ai_addrlen) < 0) {
close(s);
if (res->ai_next)
continue;
else {
error jak diabli
exit(1);
}
}
/* sukces */
break;
}
To działa dla wszystkich możliwych kombinacji, tylko , że ten sposób
jest ok wyłącznie na Linusowym jajku (na USAGI i np. BSD już to może
być inaczej).
Zdaje się, że aktualnie w postfixie inaczej jest to robione (trzeba by
zapytać Artura dlaczego o ile jest inaczej niż tu piszę).
> Jakub Bogusz
--
Arkadiusz Miśkiewicz, AM2-6BONE, 1024/3DB19BBD
IPv6 ready PLD Linux at http://www.pld.org.pl/
My jsme Borg. Odpor je marný, budete asimilováni
Więcej informacji o liście dyskusyjnej pld-devel-pl