#include #include #include #include #include #include #include "x.h" // network destription #define NETWORKDESC "testNEt" // servername char *SERVERNAME="irc.eu.localhost.noexist.net"; // maximum connections //// TODO: reuse expired sockets #define MAXCONNECT 8 /*The maximum number of connections*/ // socket setting #define SERVERHOST "localhost" #define PORTNUMBER 7072 #define CONNECTQUEUE 3 #define BUFFERLEN 1 #define VERSION "Fernandez-1.0" // some globals int clientfd[MAXCONNECT], nextclient=0, clientstatus[MAXCONNECT]; // clientstatus array, 0 = new connection; 1 = registered; main(int parameters,char **parameter) { printf("%s %s\r\n",__DATE__, __TIME__); struct sockaddr_in serv_addr; struct hostent *server; int sockfd; sockfd=socket(AF_INET,SOCK_STREAM,0); //Obviously we should check for errors, here, but I wanted to keep the code to a minimum (Error = <0). server=gethostbyname(SERVERHOST); bzero((char*)&serv_addr,sizeof(serv_addr)); serv_addr.sin_family=AF_INET; //explain me bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port=htons(PORTNUMBER); char *buffer[MAXCONNECT][1024]; bzero(buffer, 1024*MAXCONNECT); int bufferI[MAXCONNECT]; void *gbuffer = malloc(1024);// temp storage of completed line of text bzero((char *)gbuffer, 1024); puts("Started server\n"); serv_addr.sin_addr.s_addr=INADDR_ANY; //Allow connection from anyone bind(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr)); listen(sockfd,CONNECTQUEUE); if (sockfd == 0) { puts("unable to bind\n"); exit(1); } fcntl(sockfd, F_SETFL, O_NONBLOCK); //Don't block while waiting for(;;) //Loop forever { char data[BUFFERLEN]; //The data received bzero(data, BUFFERLEN); int length,a,b; //The variable to loop around each client when echoing struct sockaddr_in cli_addr; //A structure to store the client details int newsockfd,clilen=sizeof(cli_addr); //It's size is needed by accept newsockfd=accept(sockfd,(struct sockaddr*)&cli_addr,&clilen); if(newsockfd!=-1) { clientfd[nextclient++]=newsockfd; //Make a note of the new FD in the array bufferI[nextclient-1] = 0; clientstatus[nextclient-1] = 0; fcntl(newsockfd,F_SETFL,O_NONBLOCK); //Don't block while waiting // doConnect(nextclient-1); } for(a=0;a