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