Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Oleg Yurchenco                       2:5020/400     21 Feb 2002  10:10:12
 To : All
 Subject : fork() + socket
 -------------------------------------------------------------------------------- 
 
 Плз. помогите чайнику.
 Разбираюсь с программированием socket в линуксе.
 Hабрал примерчик клиента и сервера из книжки Кейта Хевиленда.
 Все работает Ок.
 В сервере каждое новое соединение обслуживается ч\з fork():
 ~~~~~~~~~~~~~~~~~~~~~
 for(;;)
   {
   if( (newsockfd = accept(sockfd,NULL,NULL)) == -1)
     {
     perror("accept error");
     continue;
     }
 
   if(fork() == 0)
     {
     printf("new connection %d\n",newsockfd);
     while(recv(newsockfd,&c,1,0) > 0)
 ~~~~~~~~~~~~~~~~~~~~~~~~~
 Возникло два вопроса:
 1) Обнаружил странное явление:
 пока работет server (srv.e) после каждого соединения в списке процессов 
 остается лишняя строка ,хотя я вижу что дочерний процесс завершается (выдаю 
 сообщение)  
 
   F S   UID   PID  PPID  C PRI  NI ADDR    SZ WCHAN  TTY          TIME CMD
 100 S   501  1014   949  0  69   0    -   676 wait4  tty1     00:00:00 bash
 000 S   501  2596  2161  0  75   0    -   682 wait4  tty1     00:00:00 bash
 000 S   501  2612  2596  0  69   0    -   328 wait_f tty1     00:00:00 
 serv.e
 044 Z   501  2613  2612  0  69   0    -     0 do_exi tty1     00:00:00 
 serv.e <d
 044 Z   501  2614  2612  0  69   0    -     0 do_exi tty1     00:00:00 
 serv.e <d
 044 Z   501  2615  2612  0  69   0    -     0 do_exi tty1     00:00:00 
 serv.e <d
 044 Z   501  2616  2612  0  69   0    -     0 do_exi tty1     00:00:00 
 serv.e <d
 044 Z   501  2617  2612  0  69   0    -     0 do_exi tty1     00:00:00 
 serv.e <d
 000 R   501  2620  2596  0  79   0    -   789 -      tty1     00:00:00 ps
 
 2) После очередного убивания серверной программы (там нет штатного выхода) 
 она перестала запускаться:
 "bind error: Address already in use"
 В списке процессов её нет. Т.е. получается, что порт который я использовал 
 остался занят до следующей перезагрузки? Hеужели ОС не освобождает ресурсы 
 при завершении процесса?
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 fork() + socket   Oleg Yurchenco   21 Feb 2002 10:10:12 
 Re: fork() + socket   Oleg O. Ossovitskii   21 Feb 2002 11:36:57 
 Re: fork() + socket   Aleksey Demidov   21 Feb 2002 11:49:24 
 Re: fork() + socket   Igor Sysoev   22 Feb 2002 07:06:20 
Архивное /ru.linux/65778deae41c.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional