[Linux] Serwer HTTP

0

Witam serdecznie.
Chciałbym zabrać się za napisanie prostego serwera HTTP dla Linuksa (lub windowsa, jeśli poszłoby szybciej - później dostosuję sobie to do odpowiedniej platformy). Jeśli chodzi o funkcjonalności - chciałbym, aby mógł nasłuchiwać na dowolnym porcie, np. 8000. Na domiar - musiałby obsługiwać wiele requestów jednocześnie i działać 24h/d.

Nie byłby to konwencjonalny serwer służący do hostowania plików HTML - chciałbym jedynie, aby mógł zapisywać do pliku informacje o konkretnej odsłonie (z jakiego IP wyszło zapytanie, z jakiego hosta, za pośrednictwem jakiej przeglądarki itd.). Odsłona wyglądałaby w ten sposób, że ktoś po prostu wpisze http://domena:port i dostanie pustą, białą stronę nic nie zawierającą. Na hoście, na którym będzie stała aplikacja, pojawi się natomiast plik z informacją o tym zapytaniu.

Nie jestem programistą C++, znam tylko podstawy, dlatego prosiłbym Was, Drodzy Forumowicze, o jak najprostsze wskazówki. Być może ktoś już kiedyś napisał podobny serwerek? Będę zobowiązany za udzielenie wszelkich informacji jak zabrać się za takie coś.

W Sieci znalazłem wiele przykładowych projekcików - najbliżej ideału jest ten poniżej (interesujące mnie dane dotyczące odsłony wyrzuca do konsoli - co chciałbym zmodyfikować do postaci zapisywania ich w plik - a dodatkowo zamyka się po wykonaniu jednej odsłony - chciałbym to zmienić):

#include <stdio.h>
#include <sys/types.h> 
#include <sys/socket.h>
#include <netinet/in.h>

void error(char *msg)
{
    perror(msg);
    exit(1);
}

int main(int argc, char *argv[])
{
     int sockfd, newsockfd, portno, clilen;
     char buffer[256];
     struct sockaddr_in serv_addr, cli_addr;
     int n;
     if (argc < 2) {
         fprintf(stderr,"ERROR, no port provided\n");
         exit(1);
     }
     sockfd = socket(AF_INET, SOCK_STREAM, 0);
     if (sockfd < 0) 
        error("ERROR opening socket");
     bzero((char *) &serv_addr, sizeof(serv_addr));
     portno = atoi(argv[1]);
     serv_addr.sin_family = AF_INET;
     serv_addr.sin_addr.s_addr = INADDR_ANY;
     serv_addr.sin_port = htons(portno);
     if (bind(sockfd, (struct sockaddr *) &serv_addr,
              sizeof(serv_addr)) < 0) 
              error("ERROR on binding");
     listen(sockfd,5);
     clilen = sizeof(cli_addr);
     newsockfd = accept(sockfd, 
                 (struct sockaddr *) &cli_addr, 
                 &clilen);
     if (newsockfd < 0) 
          error("ERROR on accept");
     bzero(buffer,256);
     n = read(newsockfd,buffer,255);
     if (n < 0) error("ERROR reading from socket");
     printf("Here is the message: %s\n",buffer);
     n = write(newsockfd,"I got your message",18);
     if (n < 0) error("ERROR writing to socket");
     return 0; 
}
0

pod linuxa?
nc -h

1 użytkowników online, w tym zalogowanych: 0, gości: 1