¿Por qué no se puede encontrar getaddrinfo al compilar con gcc y std = c99?

Tengo el siguiente código que estaba tratando de compilar. Cuando intenté con std = c99, fallaron las advertencias sobre "declaración implícita de tipo struct addrinfo" y "declaración implícita de función getaddrinfo". Funciona con std = gnu99.

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

int fails(const char *host, const char *port, struct addrinfo *hints)
{
        int rc;
        struct addrinfo *results;

        // can't find this function??
        rc = getaddrinfo(host, port, hints, &results);

        // free memory in this important application
        freeaddrinfo(results);

        return rc;
}

Los comandos que utilicé para compilar son:

gcc -c -o fail.o -Wall -Werror -std=c99 -save-temps fail.c
gcc -c -o fail.o -Wall -Werror -std=gnu99 -save-temps fail.c

En busca de fail.i (encabezado preprocesado) veo que el compilador es correcto: esos tipos no se han declarado en los encabezados introducidos.

Así que fui a los encabezados y noté que getaddrinfo está rodeado por un guardia #ifdef __USE_POSIX, que obviamente no se declara al compilar con c99.

¿Cómo le digo a gcc que quiero usar c99 y POSIX? Realmente no quiero usar gnu99 en caso de que decida cambiar los compiladores más tarde (por ejemplo, Clang o icc).

Respuestas a la pregunta(1)

Su respuesta a la pregunta