Перейти к содержанию

fork() + socket


Гость

Рекомендуемые сообщения

Плз. помогите чайнику.

Разбираюсь с программированием socket в линуксе.

Набрал примерчик клиента и сервера из книжки Кейта Хевиленда.

Все работает Ок.

В сервере каждое новое соединение обслуживается ч\з 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

044 Z 501 2614 2612 0 69 0 - 0 do_exi tty1 00:00:00

serv.e

044 Z 501 2615 2612 0 69 0 - 0 do_exi tty1 00:00:00

serv.e

044 Z 501 2616 2612 0 69 0 - 0 do_exi tty1 00:00:00

serv.e

044 Z 501 2617 2612 0 69 0 - 0 do_exi tty1 00:00:00

serv.e

000 R 501 2620 2596 0 79 0 - 789 - tty1 00:00:00 ps

2) После очередного убивания серверной программы (там нет штатного выхода)

она перестала запускаться:

"bind error: Address already in use"

В списке процессов её нет. Т.е. получается, что порт который я использовал

остался занят до следующей перезагрузки? Неужели ОС не освобождает ресурсы

при завершении процесса?

Ссылка на комментарий
Поделиться на другие сайты

heheh

tak vse eti prozessi zombie.

vot i bukovka Z p ps table.

i da, resursi sombi ne osvobozdayutsya:)

shto bi ne plodit' zombi napishi

signal(SIGCHLD, SIG_IGN);

v samom nachale, do fork();

nu i konechno ze ne zabud'

#include

cheers, amigo

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...