#include #include #include #include #include #include #include #include #define SERV_PORT 1111 #define MAX_CLIENTS 10 #define chan1 "1" #define chan2 "2" #define PERM 0666 int proc[MAX_CLIENTS]; int cntcl = 0; int ssock, csock; int flSend; FILE *log; int *pip; int disc[20]; //************ void init(); void run_child(); //************ void long2IP(long l, char *IP){ unsigned char *c=(unsigned char *) &l; sprintf(IP,"%d.%d.%d.%d",c[0],c[1],c[2],c[3]); } main(int argc, char **argv) { struct sockaddr_in caddr, tmp1; int addrlen; char c; char IP[20]; char msg[80]; FILE *flog; strcpy(argv[0], "mud: kernel"); addrlen = sizeof(caddr); // перезапись .log файлов fclose(fopen("log/connect.log","w")); fclose(fopen("log/input.log","w")); init(); listen(ssock, 5); while (1) { csock = accept(ssock, (struct sockaddr *) &caddr, &addrlen); long2IP(caddr.sin_addr.s_addr,IP); flog=fopen("log/connect.log","a"); if (flog!=NULL) { fprintf(flog,"%s%s\n","Connect from - ",IP); printf("%s%s\n","Connect from - ",IP); }; fclose(flog); if (csock<0) { perror("Не могу взять соединение"); close(flog); } else { run_child(); } } close(disc[0]); close(disc[1]); close(ssock); } void init() { struct sockaddr_in saddr; memset(proc,-1,2*MAX_CLIENTS); ssock = socket(PF_INET, SOCK_STREAM, 0); if (ssock<0) { perror("Не могу открыть сокет для сервиса\n"); exit(1); } bzero((char *) &saddr, sizeof(saddr)); saddr.sin_port = htons(SERV_PORT); saddr.sin_family = AF_INET; if (bind(ssock, (struct sockaddr *) &saddr, sizeof(saddr))<0) { perror("Не могу посадить сокет на порт"); exit(1); } } void run_child() { int pid,i; if (cntcl