C printf et fprintf(stdout) ne sont pas l'impression

C'est un peu bizarre. Mon code n'était pas sortie de ce que j'ai pensé qu'il devrait. J'ai ajouté quelques instructions d'impression, à différents stades de voir où il allait mal. Toujours rien.
J'ai donc ajouté une instruction printf au début du main. C'est là que je me suis vraiment confus.

J'ai donc présumé de quelque chose de drôle qui se passait avec les descripteurs de fichier. J'ai changé le printf à un fprintf. Toujours rien. L'impression à la sortie stderr avec fprintf fonctionne! Pourquoi est-ce arrivé?

De supprimer tous les corps de l'appareil principal à l'exception de la première instruction print et le retour ne imprimer.

Code

int main(void) {
    fprintf(stdout, "STARTED!");
    //Create an Internet domain socket
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    //If this fails exit and print the error
    if (sockfd == -1) {
        printf("Error %d, cannot create socket", errno);
        return 1;
    }
    printf("SOCKET CREATED!");

    //Creates a socket address
    struct sockaddr_in  addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8080);
    addr.sin_addr.s_addr = INADDR_ANY;

    //Attempts to bind to the socket address, again prints to error if this fails.
    if (bind(sockfd, (struct sockaddr *) &addr, sizeof(addr)) == -1)
    {
        printf("Error %d, cannot bind", errno);
        return 1;
    }

    //Starts Listening for a client
    if (listen(sockfd, 1) == -1)
    {
        printf("Error %d, cannot listen", errno);
        return 1;
    }

    //If all is successful, server is operational
    while(1)
    {
        //Creates a file descripter for the connection
        int connfd;
        //And a socket address for the client
        struct sockaddr_in cliaddr;
        socklen_t cliaddrlen = sizeof(cliaddr);
        //If a connection attempt is made accepts it.
        connfd = accept(sockfd, (struct sockaddr *) &cliaddr, &cliaddrlen);
        if (connfd == -1) {
            //If the connection fails print an error
            printf("Error %d, cannot accept connection", errno);
            continue;
        }

        //Otherwise process the request
        else {
            printf("CONNECTED!");
            char end;
            end = 1;
            while (end)
            {
                process_request(connfd);
                end = 0;
            }
        }
        close(connfd);

    }
    close(sockfd);
    return 0;
}
Oh, et je suis sûr que le code lui-même peuvent être améliorés pour toutes les suggestions d'amélioration serait aussi génial!
command 1>&2 aidera si vous voulez stdout pour ne pas être tamponnée comme stderr.

OriginalL'auteur Hector | 2013-02-09