c ++ выберите асинхронное программирование - PullRequest
2 голосов
/ 12 апреля 2011

Есть ли способ заставить 'select' ожидать чтения и записи, а также добавлять новые файловые дескрипторы?Желательно на одну нить?

Ответы [ 2 ]

3 голосов
/ 12 апреля 2011

Насколько я думаю, Вы можете сделать это в той же теме, но не в одно и то же время. В такой проблеме я обычно добавляю свой фиктивный сокет обратной петли в список дескрипторов, и всякий раз, когда мне нужно добавить новый сокет в FD_LIST, я просто отправляю байт в мой фиктивный сокет, и он прерывает цикл выбора. Затем я могу обновить FD_LIST и возобновить выбор снова.

2 голосов
/ 12 апреля 2011

Теперь, когда я знаю, каков ваш сценарий (сервер на основе сокетов, который может принимать новые входящие соединения), знаете ли вы, что вы можете добавить дескриптор файла для вашего сокета прослушивания в список для select?Смотрите, например, http://www.lowtek.com/sockets/select.html.

(Перефразированный пример:)

fd_set socks;

FD_ZERO(&socks);

// Add listener socket
listen(sock, n);
FD_SET(&socks, sock);

// Add existing socket connections
for (i = 0; i < num_existing_connections; i++)
{
    FD_SET(&socks, connection[i]);
}

// Will break if any of the existing connections are active,
// or if a new connection appears.
select(..., &socks, ...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...