C printf i fprintf (stdout,) nie są drukowane
To trochę dziwne. Mój kod nie wyświetlał tego, co myślałem, że powinien. Dodałem kilka instrukcji drukowania na różnych etapach, aby zobaczyć, gdzie się dzieje. Wciąż nic. Dodałem więc instrukcję printf na początku main. Tam naprawdę się pomieszałem.
Zakładałem więc, że dzieje się coś śmiesznego z deskryptorami plików. Zmieniłemprintf
do afprintf
. Wciąż nic. Drukowanie na stderr za pomocąfprintf
działa! Dlaczego to się dzieje?
Usunięcie całego ciała z głównego, z wyjątkiem początkowej instrukcji drukowania, a powrót drukuje.
Kodint 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;
}