You are on page 1of 1

} pids=NULL; numpids=0; identd();#endif con(); Send(sock,"NICK %s\nUSER %s

localhost localhost :%s\n",nick,ident,user); while(1) { unsigned long i; fd_set n;


struct timeval tv; FD_ZERO(&n); FD_SET(sock,&n); tv.tv_sec=60*20; tv.tv_usec=0; if
(select(sock+1,&n,(fd_set*)0,(fd_set*)0,&tv) <= 0) goto sa; for (i=0;i<numpids;i++)
if (waitpid(pids[i],NULL,WNOHANG) > 0) { unsigned int *newpids,on; for
(on=i+1;on<numpids;on++) pids[on-1]=pids[on]; pids[on-1]=0; numpids--;
newpids=(unsigned int*)malloc((numpids+1)*sizeof(unsigned int)); for
(on=0;on<numpids;on++) newpids[on]=pids[on]; free(pids); pids=newpids; } if
(FD_ISSET(sock,&n)) { char buf[4096], *str; int i; if ((i=recv(sock,buf,4096,0)) <=
0) goto sa; buf[i]=0; str=strtok(buf,"\n"); while(str && *str) { char name[1024],
sender[1024]; filter(str); if (*str == ':') { for (i=0;i<strlen(str) && str[i] != '
';i++); str[i]=0; strcpy(sender,str+1); strcpy(str,str+i+1); } else
strcpy(sender,"*"); for (i=0;i<strlen(str) && str[i] != ' ';i++); str[i]=0;
strcpy(name,str); strcpy(str,str+i+1); for (i=0;msgs[i].cmd != (char *)0;i++) if (!
strcasecmp(msgs[i].cmd,name)) msgs[i].func(sock,sender,str); if (!
strcasecmp(name,"ERROR")) goto sa; str=strtok((char*)NULL,"\n"); } } } return 0;}

You might also like