URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1505
[ Назад ]

Исходное сообщение
"Как правильно делать? (tcp daemon)"

Отправлено Игорь , 24-Мрт-03 07:21 
Здравствуйте,

Написал тут (еле еле) простенького демона, который слушает порт, и если кто подконектился форкает процесс который уже работает с этим "подконекченным" (правда долго мучался с зомби, но справился).

Теперь проблема в том что этот "слушающий демон" грузит 96 процессорного времени.

Сейчас сделано так:

    while (1)
    {
        s1=accept(listener,&addr1,&addr_len);
        if (s1 != -1) {
            for (i=1; i < 100; i++)
                    signal(i,fsignal);
            signal(17,SIGCHLD_handler);

            pid = fork();
            if (pid == 0) {
                read_write(s1);
                break;
            }
        }
    }

Думал, sleep(1) вставить - но не знаю правильно ли это...

Заранее благодарен.


Содержание

Сообщения в этом обсуждении
"Как правильно делать? (tcp daemon)"
Отправлено romanSA , 24-Мрт-03 17:54 
Уважаемый Игорь!
Попробуйте сделать так:

while (1)
{
  s1=accept(listener,&addr1,&addr_len);
  if (s1 != -1) {
    ....
  }
  else {
    /*
     напечатать куда нибудь strerror (errno)
     */
  }
}

И посмотрите, какие ошибки генерит программа.
Вообще же, после fork-а в дочернем процессе рекомендуется
делать close(listener), а в родительском - close(s1).
Если в родительском этого не делать, то у Вас скоро закончатся доступные файл-дескрипторы и accept() будет всегда выдавать ошибку.