From cd10eef059e9d9c34c927f3ac53ac43f4a9716c1 Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Sat, 06 Jun 2020 18:20:40 +0800
Subject: [PATCH] add TLV client database save and send support

---
 ch4_thread/socket_server_thread.c |   25 ++++++++++++++++---------
 1 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/ch4_thread/socket_server_thread.c b/ch4_thread/socket_server_thread.c
index 7b194af..8e4ecee 100644
--- a/ch4_thread/socket_server_thread.c
+++ b/ch4_thread/socket_server_thread.c
@@ -8,14 +8,13 @@
 #include <stdlib.h>
 #include <getopt.h>
 #include <pthread.h>
+#include <ctype.h>
 
-#define MSG_STR "Hello LingYun IoT Studio Client\n"
 
 typedef void *(THREAD_BODY) (void *thread_arg);
 
 void *thread_worker(void *ctx);
 int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg);
-
 
 void print_usage(char *progname)
 {
@@ -80,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)
@@ -106,7 +105,8 @@
 
 		printf("Accept new client[%s:%d] successfully\n", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));
 
-		thread_start(&tid, thread_worker, &clifd);
+		/* ???? Can not pass &clifd to child process, U can think about the reason  ???? */
+		thread_start(&tid, thread_worker, (void *)clifd);
 	}
 
 
@@ -159,6 +159,7 @@
 	int                  clifd;
 	int                  rv;
        	char                 buf[1024]; 
+	int                  i;
 
 	if( !ctx )
 	{
@@ -166,7 +167,7 @@
 		pthread_exit(NULL);
 	}
 
-	clifd = *(int *)ctx;
+	clifd = (int)ctx;
 	
 	printf("Child thread start to commuicate with socket client...\n");
 	
@@ -176,13 +177,13 @@
 	       	rv=read(clifd, buf, sizeof(buf));
 	       	if( rv < 0)
 	       	{
-		       	printf("Read data from client sockfd[%d] failure: %s\n", clifd, strerror(errno));
+		       	printf("Read data from client sockfd[%d] failure: %s and thread will exit\n", clifd, strerror(errno));
 		       	close(clifd);
 		       	pthread_exit(NULL);
 	       	}
 		else if( rv == 0)
 	       	{ 
-			printf("Socket[%d] get disconnected\n", clifd);
+			printf("Socket[%d] get disconnected and thread will exit.\n", clifd);
 		       	close(clifd);
 		       	pthread_exit(NULL);
 	       	} 
@@ -190,11 +191,17 @@
 		{
 		       	printf("Read %d bytes data from Server: %s\n", rv, buf);
 	       	}
+
+		/* convert letter from lowercase to uppercase */
+		for(i=0; i<rv; i++)
+		{
+			buf[i]=toupper(buf[i]);
+		}
 	       
 		rv=write(clifd, buf, rv);
 	       	if(rv < 0)
 	       	{
-		       	printf("Write to client by sockfd[%d] failure: %s\n", clifd, strerror(errno));
+		       	printf("Write to client by sockfd[%d] failure: %s and thread will exit\n", clifd, strerror(errno));
 		       	close(clifd);
 		       	pthread_exit(NULL);
 	       	}

--
Gitblit v1.9.1