#include #include #include /*#include */ #include #include #define MAXCLIENTS 20 void quit(char *msg) { perror(msg); exit(1); } void start_demo(int s) { struct sockaddr_in addr; fd_set rdset,clientset,empty; int j,i,n,len,clients; int maxfd; int cfd[MAXCLIENTS]; char buf[512]; maxfd=getdtablesize(); FD_ZERO(&clientset); clients=0; while(1) { rdset=clientset; FD_SET(s,&rdset); puts("Waiting for some input..."); n=select(maxfd,&rdset,NULL,NULL,NULL); if(n<0) quit("select"); puts("Got something..."); if(n==0) { /* timeout */; } else { if(FD_ISSET(s,&rdset)) { /* new connection available */ puts("New connection"); len=sizeof(addr); cfd[clients]=accept(s,&addr,&len); if(cfd[clients]<0) quit("accept"); printf("Accepted client #%d on fd %d\n",clients,cfd[clients]); FD_SET(cfd[clients],&clientset); clients++; } for(i=0;i0) { /* got data from a client */ write(1,buf,n); /* show it on stdout */ for(j=0;j