#include<stdio.h>#include<string.h>#include<stdlib.h>#include<sys/socket.h>#include<arpa/inet.h>#include<unistd.h>#include<pthread.h>void*connection_handler(void*socket_desc){//Get the socket descriptorintsock=*(int*)socket_desc;intread_size;char*message,client_message[2000];//Receive a message from clientwhile((read_size=recv(sock,client_message,2000,0))>0){//Send the message back to clientwrite(sock,client_message,strlen(client_message));}if(read_size==0){puts("Client disconnected");fflush(stdout);}elseif(read_size==-1){perror("recv failed");}//Free the socket pointerfree(socket_desc);return0;}intmain(intargc,char*argv[]){intsocket_desc,new_socket,c,*new_sock;structsockaddr_inserver,client;char*message;//Create socketsocket_desc=socket(AF_INET,SOCK_STREAM,0);//Prepare the sockaddr_in structureserver.sin_family=AF_INET;server.sin_addr.s_addr=INADDR_ANY;server.sin_port=htons(2000);//Bindif(bind(socket_desc,(structsockaddr*)&server,sizeof(server))<0){puts("bind failed");return1;}puts("bind done");//Listenlisten(socket_desc,3);puts("Waiting for incoming connections...");c=sizeof(structsockaddr_in);while((new_socket=accept(socket_desc,(structsockaddr*)&client,(socklen_t*)&c))){puts("Connection accepted");message="Hello Client , This is server\n";write(new_socket,message,strlen(message));pthread_tsniffer_thread;new_sock=malloc(1);*new_sock=new_socket;if(pthread_create(&sniffer_thread,NULL,connection_handler,(void*)new_sock)<0){perror("could not create thread");return1;}puts("Handler assigned");}if(new_socket<0){perror("accept failed");return1;}return0;}