Здравствуйте, Программер, Вы писали:
П>Вобщем так: стоит задача написать небольшой демон, работающий с сетью.
П>Я делаю так:
П>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;
}