/*************************************************************************** main.c - description ------------------- begin : Thu Jun 1 20:30:59 IST 2006 copyright : (C) |YEAR| by Am2006a email : amitsaha.in@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include #include #define PORT 1005 // port we're listening on int main(void) { struct sockaddr_in myaddr; // server address struct sockaddr_in remoteaddr; // client address int fdmax; // maximum file descriptor number int listener; // listening socket descriptor int newfd,pid; // newly accept()ed socket descriptor char buf[256]; // buffer for client data int nbytes; int yes=1; // for setsockopt() SO_REUSEADDR, below socklen_t addrlen; int i, j,b_status,c=0; char ch[20]; // get the listener if ((listener = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } // lose the pesky "address already in use" error message if (setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) { perror("setsockopt"); exit(1); } // bind myaddr.sin_family = AF_INET; myaddr.sin_addr.s_addr = ntohl(INADDR_LOOPBACK); myaddr.sin_port = htons(PORT); memset(&(myaddr.sin_zero), '\0', 8); if (bind(listener, (struct sockaddr *)&myaddr, sizeof(myaddr)) == -1) { perror("bind"); exit(1); } // listen if (listen(listener, 10) == -1) { perror("listen"); exit(1); } printf("Server Started.Listening for incoming connections\n\n"); while(1){ if ((newfd = accept(listener, (struct sockaddr *)&remoteaddr,&addrlen)) == -1) { perror("accept"); } else { // fork a new child whenever we have a new client connection pid=fork(); if(pid==0){ //handle the client printf("new connection from %s on socket %d\n", inet_ntoa(remoteaddr.sin_addr),newfd); printf("Recieved %d bytes from the client",read(newfd,buf,sizeof(buf))); printf("%s",buf); //do any other tasks as needed exit(0); } } } return 0; }