#include
#include
#include
#include
#include
#include
#include
#include
#define BUF_SIZE 2048
#define response_code "HTTP/1.0 200 OK\r\n"
#define SERVER "Server: Dynamic Thread\r\n"
#define CONTENT_TYPE "Content-Type: text/html\r\n"
#define CONTENT_LENGTH "Content-Length: 2000\r\n"
int main(int argc, char ** argv)
{
int sock, newsock, port, clen;
char buf[BUF_SIZE];
struct sockaddr_in serv_addr, cli_addr;
if (argc < 2)
{
fprintf(stderr,"usage: %s \n", argv[0]);
return EXIT_FAILURE;
}
sock = socket(AF_INET, SOCK_STREAM, 0);
if (socket < 0)
{
printf("socket() failed: %d\n", errno);
return EXIT_FAILURE;
}
memset((char *) &serv_addr, 0, sizeof(serv_addr));
port = atoi(argv[1]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(port);
if (bind(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
{
printf("bind() failed: %d\n", errno);
return EXIT_FAILURE;
}
listen(sock, 1);
clen = sizeof(cli_addr);
newsock = accept(sock, (struct sockaddr *) &cli_addr, (socklen_t*) &clen);
if (newsock < 0)
{
printf("accept() failed: %d\n", errno);
return EXIT_FAILURE;
}
memset(buf, 0, BUF_SIZE);
read(newsock, buf, BUF_SIZE-1);
buf[BUF_SIZE] = 0;
printf("MSG: %s\n", buf);
//Send HTTP Response line by line
char buffer[BUF_SIZE];
strcpy(buffer, response_code);
write(newsock, buffer, strlen(buffer));
strcpy(buffer, SERVER);
write(newsock, buffer, strlen(buffer));
strcpy(buffer, CONTENT_TYPE);
write(newsock, buffer, strlen(buffer));
strcpy(buffer, CONTENT_LENGTH);
write(newsock, buffer, strlen(buffer));
strcpy(buffer, "Last-Modified: Tue, 17 Apr 2012 14:32:04 GMT\r\n");
write(newsock, buffer, strlen(buffer));
strcpy(buffer, "Keep-Alive: timeout=15, max=50\r\n");
write(newsock, buffer, strlen(buffer));
strcpy(buffer, "Connection: Keep-Alive\r\n");
write(newsock, buffer, strlen(buffer));
strcpy(buffer, "\r\n");
write(newsock, buffer, strlen(buffer));
strcpy(buffer, " |