From 46901ff78cce3cedea4ba0c38126b5e50b87faa8 Mon Sep 17 00:00:00 2001
From: Kolan Sh <mecareful@gmail.com>
Date: Mon, 2 May 2011 19:21:54 +0400
Subject: [PATCH] =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82?=
 =?UTF-8?q?=D1=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 c/masync_server/Makefile      |  2 +-
 c/masync_server/echo-client.c |  3 ++
 c/masync_server/echo-server.c | 86 ++++++++++-------------------------
 3 files changed, 28 insertions(+), 63 deletions(-)

diff --git a/c/masync_server/Makefile b/c/masync_server/Makefile
index 14147cb..969bee0 100644
--- a/c/masync_server/Makefile
+++ b/c/masync_server/Makefile
@@ -5,7 +5,7 @@ OBJECTS=$(SOURCES:%.c=%.o)
 #CFLAGS=-march=core2 -mtune=core2 -O2 -mfpmath=sse -msse4.1 -pipe
 #LDFLAGS=-Wl,-O1 -Wl,--as-needed
 
-CFLAGS+=$(shell pkg-config --cflags liblist)
+CFLAGS+= -g $(shell pkg-config --cflags liblist)
 LDFLAGS+=$(shell pkg-config --libs liblist) -lpthread
 
 all: $(TARGET) echo-server echo-client
diff --git a/c/masync_server/echo-client.c b/c/masync_server/echo-client.c
index ba6cc05..5bbcec8 100644
--- a/c/masync_server/echo-client.c
+++ b/c/masync_server/echo-client.c
@@ -48,6 +48,9 @@ int main()
 	}
 
 	send(sock, message, sizeof(message), 0);
+
+	memset(buf, sizeof(message), 0);
+
 	recv(sock, buf, sizeof(message), 0);
 
 	printf("%s\n", buf);
diff --git a/c/masync_server/echo-server.c b/c/masync_server/echo-server.c
index 7837ad7..d404bb9 100644
--- a/c/masync_server/echo-server.c
+++ b/c/masync_server/echo-server.c
@@ -14,9 +14,9 @@
 #include "xerror.h"
 #include "netfuncs.h"
 
-#define NUM_THREADS 8
+#define NUM_THREADS 1
+#define MAX_CONNECTIONS 1
 
-pthread_mutex_t request_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 void *serv_request(void *data)
 {
@@ -138,14 +138,8 @@ void *serv_request(void *data)
 		if (FD_ISSET(listenSocket, &readFdSet)) {
 
 			while (1) {
-
-				/*
-				   Вызовы pthread_mutex_lock, pthread_mutex_unlock
-				   Не нужны в среде Linux
-				 */
-				pthread_mutex_lock(&request_mutex);
 				int result = accept(listenSocket, (struct sockaddr *)NULL, NULL);
-				pthread_mutex_unlock(&request_mutex);
+
 				if (result < 0) {
 					if (errno == EAGAIN || errno == EWOULDBLOCK)
 						break;
@@ -169,33 +163,46 @@ void *serv_request(void *data)
 	}
 }
 
+/*
+ * Установка слушающего сокета на порту port
+ */
 int getServerSocket(unsigned short int port)
 {
 	int listenSocket;
 	struct sockaddr_in listenSockaddr;
 
+	// создание сокета
 	if ((listenSocket = socket(PF_INET, SOCK_STREAM, 0)) < 0)
 		die("socket()", errno);
+
+	// задание адреса сокета и его параметров
 	memset(&listenSockaddr, 0, sizeof(listenSockaddr));
 	listenSockaddr.sin_family = PF_INET;
 	listenSockaddr.sin_port = htons(port);
 	listenSockaddr.sin_addr.s_addr = INADDR_ANY;
 
+	// привязка сокета listenSocket к адресу listenSockaddr
 	if (bind(listenSocket, (struct sockaddr *)&listenSockaddr, sizeof(listenSockaddr)) < 0)
 		die("bind()", errno);
 
-	if (listen(listenSocket, 5) < 0)
+	// установка очереди входящих соединений в MAX_CONNECTIONS
+	if (listen(listenSocket, MAX_CONNECTIONS) < 0)
 		die("listen()", errno);
 
 	return listenSocket;
 }
 
+/*
+ * Основная процедура создания слушающего сокета
+ * и нитей, обрабатывающих входящие соединения
+ */
 int main(int argc, char *argv[])
 {
 	int k;
 	int descSock;
-	char *service = "1500";
+	char *service = "3425";
 
+	// порт в argv[1]
 	switch (argc) {
 	case 1:
 		break;
@@ -207,75 +214,30 @@ int main(int argc, char *argv[])
 		exit(1);
 	}
 
+	// NUM_THREADS нитей
 	pthread_t p_thread[NUM_THREADS];
 	pthread_attr_t attr;
+	// инициализация аттрибутов нитей
 	pthread_attr_init(&attr);
 	size_t stacksize = 512;
 	pthread_attr_setstacksize(&attr, stacksize);
 	pthread_attr_getstacksize(&attr, &stacksize);
 
+	// создание слушающего сокета
 	descSock = getServerSocket(atoi(service));
 
+	// создание NUM_THREADS нитей
 	for (k = 0; k < NUM_THREADS; k++) {
 		pthread_create(&p_thread[k], &attr, serv_request, (void *)&descSock);
 		printf("Thread %d started\n", k);
 	}
 
+	// уничтожение объекта атрибутов
 	pthread_attr_destroy(&attr);
 
+	// ожидание завершения работы нитей
 	for (k = 0; k < NUM_THREADS; k++) {
 		pthread_join(p_thread[k], NULL);
 		printf("Completed join with thread %d\n", k);
 	}
 }
-
-//~ int tmp()
-//~ {
-    //~ int sock, listener;
-    //~ struct sockaddr_in addr;
-    //~ char buf[1024];
-    //~ int bytes_read;
-//~
-    //~ listener = socket(AF_INET, SOCK_STREAM, 0);
-    //~ if(listener < 0)
-    //~ {
-	//~ perror("socket");
-	//~ exit(1);
-    //~ }
-//~
-    //~ addr.sin_family = AF_INET;
-    //~ addr.sin_port = htons(3425);
-    //~ addr.sin_addr.s_addr = htonl(INADDR_ANY);
-    //~ if(bind(listener, (struct sockaddr *)&addr, sizeof(addr)) < 0)
-    //~ {
-	//~ perror("bind");
-	//~ exit(2);
-    //~ }
-//~
-    //~ listen(listener, 1);
-	//~ //printf("%X\n",addr.sin_addr.s_addr);
-    //~ while(1)
-    //~ {
-		//~ socklen_t n = sizeof(struct sockaddr);
-		//~ sock = accept(listener, (struct sockaddr *)&addr, &n);
-		//~ printf("incoming request from %s\n",int2ip(ntohl(addr.sin_addr.s_addr)));
-		//~ //printf("%X\n",addr.sin_addr.s_addr);
-	//~ if(sock < 0)
-	//~ {
-	    //~ perror("accept");
-	    //~ exit(3);
-	//~ }
-//~
-	//~ while(1)
-	//~ {
-	    //~ bytes_read = recv(sock, buf, 1024, 0);
-	    //~ if(bytes_read <= 0) break;
-	    //~ send(sock, buf, bytes_read, 0);
-	    //~ printf("%s", buf);
-	//~ }
-//~
-	//~ close(sock);
-    //~ }
-//~
-    //~ return 0;
-//~ }