1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

Сокеты в Unix

Тема в разделе "С и С++", создана пользователем alexdrob, 5 апр 2011.

Статус темы:
Закрыта.
  1. alexdrob

    alexdrob Гость

    Репутация:
    0
    Как я понял из статей, чтобы сокет сделать не блокируемым, нужно вызвать функцию
    Код:
    fcntl(sd, F_SETFL, O_NONBLOCK);
    и для каждого подключенного клиента тоже.

    Вот назрел вопрос, а как сделать ожидание клиентов в основном потоке, а опрос подключившихся в дополнительном. Идея примерно такая

    основной поток
    Код:
    std::set<ClientSocket*> clients;
    clients.clear();
    while(1)
    {
    fd_set readset;
    FD_ZERO(&readset);
    FD_SET(sd, &readset);
    
    timeval timeout;
    timeout.tv_sec = 15;
    timeout.tv_usec = 0;
    
    if(select(sd+1, &readset, NULL, NULL, &timeout) <= 0)
    {
    perror("Erorr socket select");
    exit(1);
    }
    
    if(FD_ISSET(sd, &readset))
    {
    ClientSocket* sock = new ClientSocket(sd);
    
    if(sock->getSock() < 0)
    {
    perror("Erorr socket accept");
    exit(1);
    }
    
    fcntl(sock->getSock(), F_SETFL, O_NONBLOCK);
    
    printf ("New client connected\n");
    
    clients.insert(sock);
    }
    }
    Но проходит таймаут и программа завершается.

    Можно ли сделать основной сокети, который ждёт подключения клиентов блокируемым, а подключившихся клиентов н*цензура*кируемыми, что то типа
    Код:
    while(1)
    {
    sock = accept(listener, NULL, NULL);
    fcntl(sock->getSock(), F_SETFL, O_NONBLOCK);
    clients.insert(sock);
    }
    Как бы основной поток будет виснуть на accept пока не появится новый клиент, а если появится сокет новый станет асинхронным. А основной останется синхронный. Или как сделать правильней?
     
Загрузка...
Похожие Темы - Сокеты Unix
  1. areostar
    Ответов:
    1
    Просмотров:
    735
  2. 123456789igor
    Ответов:
    0
    Просмотров:
    1.372
  3. iosif88
    Ответов:
    1
    Просмотров:
    1.788
  4. acorn
    Ответов:
    13
    Просмотров:
    4.895
  5. Баламут
    Ответов:
    2
    Просмотров:
    3.185
Статус темы:
Закрыта.

Поделиться этой страницей