Por que e como o gcc emite um aviso para gets ()?

while(1)
    {
        printf("\nEnter message : ");
        gets(message);

        //Send some data
        if( send(sock , message , strlen(message) , 0) < 0)
        {
            puts("Send failed");
            return 1;
        }

        //Receive a reply from the server
        if( recv(sock , server_reply , 2000 , 0) < 0)
        {
            puts("recv failed");
            break;
        }

        puts("Server reply :");
        puts(server_reply);
    }

    close(sock);
    return 0;
}

Isso faz parte do meu programa. Ao compilar e executar, recebo um erro. A mensagem do erro é

aviso: a função gets é perigosa e não deve ser usada!

questionAnswers(3)

yourAnswerToTheQuestion