/* NAME : README TYPE : readme file AUTHOR : Arunkumar Elango */ The project consists of a server program and a client porgram. sockser.C : This is the server program. It takes the command line as specified in the problem. It creates a child for each client request, if there are not more than maxConnections number of children. It does a NON-BLOCKING wait for each child to collect their exit status.It also catches the SIGCHLD signal and in the signal handler, it decrements the counter that keeps track of the number of children created. The server requires a password from the client to process the request. If the client sends the correct password, it sends back an acknowledgement, otherwise the child server exits and thus the connection with this client is closed. It also checks to see if the accept call succeeds, and if it fails it checks to see if it failed because of a SIGCHLD signal or otherwise. To execute a command that the client requests, the server first copies the data it recieves from the client onto a file called "dummy". It then does the following : If the command to be executed is, say wc, the server does : cat dummy | wc This way, the data from the client serves as the input for the command to be executed. And, the child server's STDOUT is duped to the newsocketfd, so automatically the output gets written to the socket, for the client. rpipe.C : This is the client program. It takes the commandline as specified in the problem. It sends the executable name and the data to be executed on to the server. Before doing this,it sends password to the server. Finally, it prints the output on the screen.