From 6c41fb183d2ea71bb8d3a7bf4947f28eacfe97fe Mon Sep 17 00:00:00 2001
From: Guo Wenxue <guowenxue@gmail.com>
Date: Fri, 16 Nov 2018 13:52:26 +0800
Subject: [PATCH] update socket server fork program, add convert lowercase to uppercase support

---
 ch3_fork/socket_server_fork.c     |   82 +++++++++++++++++++++-------------------
 ch4_thread/socket_server_thread.c |    4 +-
 2 files changed, 45 insertions(+), 41 deletions(-)

diff --git a/ch3_fork/socket_server.c b/ch3_fork/socket_server_fork.c
similarity index 63%
rename from ch3_fork/socket_server.c
rename to ch3_fork/socket_server_fork.c
index 3780019..6b40678 100644
--- a/ch3_fork/socket_server.c
+++ b/ch3_fork/socket_server_fork.c
@@ -7,8 +7,7 @@
 #include <arpa/inet.h>
 #include <stdlib.h>
 #include <getopt.h>
-
-#define MSG_STR "Hello LingYun IoT Studio Client\n"
+#include <ctype.h>
 
 void print_usage(char *progname)
 {
@@ -72,8 +71,8 @@
 	memset(&servaddr, 0, sizeof(servaddr));
 	servaddr.sin_family=AF_INET;
 	servaddr.sin_port = htons(port);
-	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
-	//inet_aton("192.168.0.16", &servaddr.sin_addr);
+	servaddr.sin_addr.s_addr = htonl(INADDR_ANY); /* listen all the IP address on this host */
+	//inet_aton("192.168.0.16", &servaddr.sin_addr); /* Only listen specify IP address on this host */
 
 	rv=bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
 	if(rv < 0)
@@ -96,8 +95,7 @@
 			continue;
 		}
 
-		printf("Accept new client[%s:%d] successfully\n", 
-				inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));
+		printf("Accept new client[%s:%d] successfully\n", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));
 
 		pid = fork();
 		if( pid < 0 )
@@ -115,44 +113,50 @@
 		else if ( 0 == pid )
 		{ 
 			char                 buf[1024];
+			int                  i;
 
-			/* Child process close the listen socket fd */
-			close(sockfd); 
-		       
 			printf("Child process start to commuicate with socket client...\n");
-			memset(buf, 0, sizeof(buf));
-		       	rv=read(clifd, buf, sizeof(buf));
-		       	if( rv < 0)
-		       	{
-			       	printf("Read data from client sockfd[%d] failure: %s\n", clifd, strerror(errno));
-			       	close(clifd);
-				exit(0);
-		       	}
-		       	else if( rv == 0)
-		       	{ 
-				printf("Socket[%d] get disconnected\n", clifd);
-			       	close(clifd);
-				exit(0);
-			} 
-			else if( rv > 0 ) 
+
+			close(sockfd); /* Child process close the listen socket fd */
+
+			while(1)
 			{
-			       	printf("Read %d bytes data from Server: %s\n", rv, buf);
-		       	} 
-			
-			rv=write(clifd, MSG_STR, strlen(MSG_STR));
-		       	if(rv < 0)
-		       	{
-			       	printf("Write to client by sockfd[%d] failure: %s\n", clifd, strerror(errno));
-			       	close(clifd);
-				exit(0);
-		       	}
+			       	memset(buf, 0, sizeof(buf));
+			       	rv=read(clifd, buf, sizeof(buf));
+			       	if( rv < 0 )
+			       	{
+				       	printf("Read data from client sockfd[%d] failure: %s\n", clifd, strerror(errno));
+				       	close(clifd);
+				       	exit(0);
+			       	}
+			       	else if( rv == 0)
+			       	{ 
+					printf("Socket[%d] get disconnected\n", clifd);
+				       	close(clifd);
+				       	exit(0);
+			       	} 
+				else if( rv > 0 ) 
+				{
+				       	printf("Read %d bytes data from Server: %s\n", rv, buf);
+			       	} 
 
-			sleep(1);
+				/* convert letter from lowercase to uppercase */
+				for(i=0; i<rv; i++)
+				{
+				       	buf[i]=toupper(buf[i]);
+				}
 
-			printf("close client socket[%d] and child process exit\n", clifd);
-		       	close(clifd);
-		       	exit(0);
-		}
+				rv=write(clifd, buf, rv);
+			       	if(rv < 0)
+			       	{
+				       	printf("Write to client by sockfd[%d] failure: %s\n", clifd, strerror(errno));
+				       	close(clifd);
+				       	exit(0);
+			       	}
+
+			} /* Child process loop */
+
+		} /* Child process start*/
 	}
 
 
diff --git a/ch4_thread/socket_server_thread.c b/ch4_thread/socket_server_thread.c
index f2150a7..8e4ecee 100644
--- a/ch4_thread/socket_server_thread.c
+++ b/ch4_thread/socket_server_thread.c
@@ -79,8 +79,8 @@
 	memset(&servaddr, 0, sizeof(servaddr));
 	servaddr.sin_family=AF_INET;
 	servaddr.sin_port = htons(port);
-	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
-	//inet_aton("192.168.0.16", &servaddr.sin_addr);
+	servaddr.sin_addr.s_addr = htonl(INADDR_ANY); /* listen all the IP address on this host */
+	//inet_aton("192.168.0.16", &servaddr.sin_addr); /* Only listen specify IP address on this host */
 
 	rv=bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
 	if(rv < 0)

--
Gitblit v1.9.1