Re: Демоны
От: Garrrrr  
Дата: 22.11.04 17:00
Оценка: 2 (1)
Здравствуйте, Программер, Вы писали:

П>Вобщем так: стоит задача написать небольшой демон, работающий с сетью.

П>Я делаю так:
П>1) Готовлю сокет, вызываю к нему Listen
П>2) Создаю потоки с помощью pthread_create
П>3) В новый потоках вызывается accept
П>4) Отключаю вызывающий поток от консоли с помощью daemon

П>Вопрос в слудующем: чем занять вызывающий поток, т.к. иначе он вываливается и останавливаются все остальные потоки?

П>И еще в top я вижу только одну запись, почему? Скажем записей httpd я вижу куду больше. При этом хочу заметить, что pthread_create ошибок не возвращает, соккет начинает принимать соединения (проверенно). pthread_detach ситуацию не решил.

П>Как в этом случае поступить? Можно, конечно, вызывающий (первый) поток тоже отправить на accept. Но что лучше?

Вообще обычно 1 (первый, главный) поток занимается accept() и уже после успешного возврата создаются потоки
для обработки соединения, т е получается что то вроде
void* the_handler(void *arg)
{
  int *fd = *(int*)arg;
  // processing the connection
}

int main(int, char**)
{
  // creating & preparing socket
  while ( 1 ) {
    if ( fd = accept(???) )
      pthread_create(the_handler ....);
  }
  return 0;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.