Por que o getaddrinfo não pode ser encontrado ao compilar com gcc e std = c99

Eu tenho o seguinte código que eu estava tentando compilar. Quando tentei com std = c99 ele falhou com avisos sobre "declaração implícita do tipo struct addrinfo" e "declaração implícita de função getaddrinfo". Funciona com 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;
}

Os comandos que usei para compilar são:

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

Olhando para o fail.i (cabeçalho pré-processado), vejo que o compilador está certo: esses tipos não foram declarados nos cabeçalhos recebidos.

Então eu fui para os cabeçalhos e notei que getaddrinfo é cercado por um guarda #ifdef __USE_POSIX, que obviamente não é declarado quando compilando com c99.

Como eu digo ao gcc que eu quero usar c99 e POSIX? Eu realmente não quero usar o gnu99 caso eu decida trocar os compiladores mais tarde (por exemplo, Clang ou icc).

questionAnswers(1)

yourAnswerToTheQuestion