Task: We need to modify the code on the server side by creating a child process each
Question:
Task: We need to modify the code on the server side by creating a child process each time after a client connection is successfully accepted by the server, and letting the child process handle the read and write data while the parent process continues to listen and accept.
Sol9:
To modify the code on the server side to create a child process each time a client connection is accepted, you can use the fork() system call to create a new process. Here is an example code snippet that demonstrates how to modify the server code to create child processes for each new client connection:
#include
#include
#include
#include
#include
int main()
{
int server_socket, client_socket;
struct sockaddr_in server_address, client_address;
socklen_t client_address_length;
int pid;
// Create the server socket
server_socket = socket(AF_INET, SOCK_STREAM, 0);
// Bind the socket to a specific IP address and port
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = INADDR_ANY;
server_address.sin_port = htons(9000);
bind(server_socket, (struct sockaddr*) &server_address, sizeof(server_address));
// Listen for incoming connections
listen(server_socket, 5);
// Accept incoming connections and create child processes to handle them
while(1)
{
client_address_length = sizeof(client_address);
client_socket = accept(server_socket, (struct sockaddr*) &client_address, &client_address_length);
// Create a child process to handle the client connection
pid = fork();
if (pid
printf("Error creating child process ");
return 1;
} else if (pid == 0) {
// This is the child process - handle the client connection
// Read and write data as necessary using the client_socket
close(server_socket);
// Handle client connection
exit(0);
} else {
// This is the parent process - continue listening for incoming connections
close(client_socket);
}
}
// Close the server socket
close(server_socket);
return 0;
}
In this modified code, the parent process continues to listen for incoming connections while the child process handles the read and write operations for each client connection. The parent process closes the client socket after forking a child process, and the child process closes the server socket after it completes its operation.
Note that you will need to add code to handle the read and write operations for each client connection in the child process. The exact implementation will depend on the specific requirements of your application.