TCP Server that handles multiple client requests at the same time by using multiple threads

Dependents:   ThreadServer Server_Multi_Client

Revision:
4:c57a998796ae
Parent:
1:e1db78d5ccc1
--- a/Server.cpp	Tue Jun 11 21:11:33 2013 +0000
+++ b/Server.cpp	Sat Jun 29 23:21:20 2013 +0000
@@ -9,15 +9,15 @@
 ** Descriptions:        The original version
 **
 **------------------------------------------------------------------------------------------------------
-** Modified by:            
-** Modified date:    
+** Modified by:            Ivan Shindev
+** Modified date:    06/29/2013
 ** Version:
-** Descriptions:        
+** Descriptions:        Added functionality of running multiple thread instances of the same function
 ********************************************************************************************************/
 #include "Server.h"
 
 #include "mbed.h"
-
+#include "Threads.h"
 /*Handle_client handles the client request
 *
 * Default: Echo the clients request
@@ -40,7 +40,6 @@
 
 }
 
-osThreadDef(Handle_client, osPriorityNormal, DEFAULT_STACK_SIZE);
  
 Server::Server(int port, int max_number_of_clients):
         _port(port), _max_number_of_clients(max_number_of_clients){
@@ -79,20 +78,35 @@
     }
   
     socklen_t newSockRemoteHostLen = sizeof(localHost);
-    int tid;
-  
-    for(tid=0;tid<=_max_number_of_clients;tid++) 
+    
+    ThreadList* my_threads=NULL; //List of all Initialized threads
+    ThreadList* thread; //pointer to the last created ThreadList element
+    int max=_max_number_of_clients;
+    while(1)
     {
         new_socket = lwip_accept(socket_server, (struct sockaddr*) &localHost, &newSockRemoteHostLen);
         if (new_socket < 0)
          {
-            return -1;
+          
+         }
+         else
+         {
+            
+            if(initThread(&my_threads,Handle_client,&thread,max)==0)
+            {
+               lwip_close(new_socket);
+              
+            }
+            else
+            {
+               
+                thread->id=osThreadCreate(thread->thread,(void *) new_socket);
+            
+            }
          }
 
-               osThreadCreate(osThread(Handle_client), (void *) new_socket);
     
    }
-    return 1;
 }