diff --git a/source/client/CMakeLists.txt b/source/client/CMakeLists.txt index 92360c6..7f26ed1 100644 --- a/source/client/CMakeLists.txt +++ b/source/client/CMakeLists.txt @@ -33,7 +33,7 @@ add_executable( ${PROJECT_NAME} ${SOURCES} ) set_target_properties( ${PROJECT_NAME} PROPERTIES OUTPUT_NAME ttrts ) # dependent on main ttrts libary -target_link_libraries( ${PROJECT_NAME} ttrts ) +target_link_libraries( ${PROJECT_NAME} ttrts pthread ) # Installation target install( TARGETS ${PROJECT_NAME} DESTINATION bin ) diff --git a/source/client/server.cpp b/source/client/server.cpp index 2a4edf7..9dabe82 100644 --- a/source/client/server.cpp +++ b/source/client/server.cpp @@ -1,5 +1,7 @@ #include "server.h" +#include +#include #include #include @@ -15,64 +17,17 @@ #include "net.h" -int runServer(int argc, char* argv[]) +std::vector gClientThreads; + +int clientHandler( sockaddr_in cli_addr, socklen_t clilen, int clientsockfd) { - sockaddr_in serv_addr; // Server address - int sockfd; // socket File descriptor - int portno = TTRTS_PORT; // Port number - - struct sockaddr_in cli_addr; // Client address - int newsockfd; // new socket File descriptor - socklen_t clilen; // length of client address - - clilen = sizeof(sockaddr_in); - - int n = 0; // return value for read and write calls + std::cout<<"Client connected from "<= 0 ) { // empty the buffer @@ -81,7 +36,7 @@ int runServer(int argc, char* argv[]) // Read in the new socket // read will block until the client has called write // up to the full size of the buffer - n = read(newsockfd,buffer,sizeof(buffer)-1); + n = read(clientsockfd,buffer,sizeof(buffer)-1); if (n < 0) error("ERROR reading from socket"); @@ -89,6 +44,88 @@ int runServer(int argc, char* argv[]) printf("%s",buffer); } + return 0; +} + +int runServer(int argc, char* argv[]) +{ + std::cout<<"Setting up server on port "< 10) + { + error("Binding failed after retries"); + } + + if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) >= 0) + break; + + std::cout<<"Binding failed on try "<