add web..
diff --git a/web_serv b/web_serv
new file mode 100755
index 0000000..8fbc1c3
--- /dev/null
+++ b/web_serv
Binary files differ
diff --git a/web_serv.c b/web_serv.c
new file mode 100644
index 0000000..510add2
--- /dev/null
+++ b/web_serv.c
@@ -0,0 +1,161 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <string.h>
+#include <arpa/inet.h>
+#include <pthread.h>
+
+#define BUF_SIZE 1024
+#define SMALL_BUF 100
+
+void * request_handler(void * arg);
+void send_data(FILE *fp, char *ct, char *file_name);
+char * content_type(char *file);
+void send_error(FILE *fp);
+void error_handling(char *message);
+
+int main(int argc, char const *argv[])
+{
+	int serv_sock, clnt_sock;
+	struct sockaddr_in serv_adr, clnt_adr;
+	socklen_t clnt_adr_size;
+	// char buf[BUF_SIZE];
+	pthread_t t_id;
+
+	if(argc != 2)
+	{
+		printf("Usage :%s <port>\n", argv[0]);
+		exit(0);
+	}
+
+	serv_sock = socket(PF_INET, SOCK_STREAM,0);
+	memset(&serv_adr,0,sizeof(serv_adr));
+	serv_adr.sin_family = AF_INET;
+	serv_adr.sin_addr.s_addr = htonl(INADDR_ANY);
+	serv_adr.sin_port = htons(atoi(argv[1]));
+
+	if(bind(serv_sock,(struct sockaddr*)&serv_adr,sizeof(serv_adr)) == -1)
+		error_handling("bind err");
+	if(listen(serv_sock, 20) == -1)
+		error_handling("listen err");
+
+	while(1)
+	{
+		clnt_adr_size = sizeof(clnt_adr);
+		clnt_sock = accept(serv_sock, (struct sockaddr *)&clnt_adr, &clnt_adr_size);
+		printf("Connect Request :%s:%d\n", inet_ntoa(clnt_adr.sin_addr), ntohs(clnt_adr.sin_port));
+		pthread_create(&t_id, NULL, request_handler, (void *)&clnt_sock);
+		pthread_detach(t_id);
+	}
+	close(serv_sock);
+	return 0;
+}
+
+void * request_handler(void *arg)
+{
+	int clnt_sock = *((int*)arg);
+	char req_line[SMALL_BUF];
+	FILE *clnt_read;
+	FILE *clnt_write;
+
+	char method[10];
+	char ct[5];
+	char file_name[30];
+
+	clnt_read = fdopen(clnt_sock, "r");
+	clnt_write = fdopen(dup(clnt_sock), "w");
+	fgets(req_line, SMALL_BUF, clnt_read);
+	if(!strcmp(req_line, "HTTP://"))
+	{
+		send_error(clnt_write);
+		fclose(clnt_read);
+		fclose(clnt_write);
+        return NULL;
+	}
+
+	strcpy(method, strtok(req_line, " /"));
+	strcpy(file_name, strtok(NULL, " /"));
+	strcpy(ct,content_type(file_name));
+	if(strcmp(method,"GET") != 0)
+	{
+		send_error(clnt_write);
+		fclose(clnt_read);
+		fclose(clnt_write);
+		return NULL;
+	}
+
+	fclose(clnt_read);
+	send_data(clnt_write, ct, file_name);
+	return NULL;
+}
+
+void send_data(FILE *fp, char *ct, char *file_name)
+{
+	char protocol[]="HTTP/1.0 200 OK\r\n";
+	char server[]="Server:Linux Web Server \r\n";
+	char cnt_len[]="Content-length:2048\r\n";
+	char cnt_type[SMALL_BUF];
+	char buf[BUF_SIZE];
+	FILE *send_file;
+
+	sprintf(cnt_type, "Content-type:%s\r\n\r\n",ct);
+	send_file = fopen(file_name,"r");
+	if(send_file == NULL)
+	{
+		send_error(fp);
+		return;
+	}
+
+	/*send head message*/
+	fputs(protocol, fp);
+	fputs(server, fp);
+	fputs(cnt_len, fp);
+	fputs(cnt_type, fp);
+
+    /*send body data*/
+    while(fgets(buf, BUF_SIZE, send_file) != NULL)
+    {
+    	fputs(buf, fp);
+    	fflush(fp);
+    }
+    fflush(fp);
+    fclose(fp);
+}
+
+char * content_type(char *file)
+{
+	char extension[SMALL_BUF];
+	char file_name[SMALL_BUF];
+	strcpy(file_name, file);
+	strtok(file_name,".");
+	strcpy(extension, strtok(NULL,"."));
+
+	if(!strcmp(extension,"html") || !strcmp(extension, "htm"))
+		return "text/html";
+	else
+		return "text/plain";
+}
+
+void send_error(FILE *fp)
+{
+	char protocol[]="HTTP/1.0 400 Bad Request\r\n";
+	char server[]="Server:Linux Web Server \r\n";
+	char cnt_len[]="Content-length:2048\r\n";
+	char cnt_type[]="Content-type:text/html\r\n\r\n";
+	/*char content[]="<html><head><title>NETWORK</title></head>"
+	"<body><font size=+5><br>err happened!"
+	"</font></body></html>";*/
+	fputs(protocol, fp);
+	fputs(server, fp);
+	fputs(cnt_len, fp);
+	fputs(cnt_type, fp);
+	fflush(fp);
+}
+
+void error_handling(char *message)
+{
+	fputs(message,stderr);
+	fputc('\n',stderr);
+	exit(1);
+}
\ No newline at end of file