Задание на лабораторную работу
- Изучить документацию к функциям fork (man fork), setsid (man setsid)
- Добавить возможность серверному приложению из предыдущего задания одновременно открывать несколько сессий.
- По желанию: обеспечить передачу сообщений между клиентами.
Приложение. Пример работы с сокетами
int listensocket,datasocket; int pid; signal (SIGCHLD, SIG_IGN); //auto-close child processes /* open and bind listensocket here */ if ((pid=fork())==-1) { globalerror(stderr,"Error: global fork"); exit(1); } if (pid) exit(0); //End parent fclose(stdin); //Close standart input and output streams fclose(stdout); fclose(stderr); setsid(); // De-attach terminal if (listen(listensocket,5)==-1) { globalerror("Error: listen()"); exit(1); } while (1) { int addrlen; bzero(&clnt_addr, sizeof(clnt_addr)); addrlen=sizeof(clnt_addr); if ((datasocket=accept(s, (struct sockaddr *)&clnt_addr, &addrlen))==-1) // accept new connection { globalerror("Error: accept()"); exit(1); } if ((pid=fork())==-1) { globalerror("Error: fork()"); exit(1); } if (pid==0) //Child { close(listensocket); /* some work here */ close(datasocket); exit(0); } //Parent close(datasocket); } }