C ++ Winsock неблокирующий / асинхронный UDP-сокет - PullRequest
3 голосов
/ 06 апреля 2010

Я разрабатываю небольшой процессор для обработки данных в c ++ через UDP-сокеты, и у меня есть поток (только один и кроме сокетов), который обрабатывает информацию, полученную от них.

Моя проблема возникает, когда мне нужно получить информацию от нескольких клиентов в сокете одновременно.

Как я могу сделать что-то вроде:

Socket foo;
/* init socket vars and attribs */
while (serving){
thread_processing(foo_info);
}

для нескольких клиентов (много одновременного доступа) в c ++?

Я использую winsocks atm на win32, но просто работаю со стандартными блокирующими сокетами udp. Нет графического интерфейса, это консольное приложение. Я буду очень признателен за пример или указатель на него;).

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 06 апреля 2010
Сокет

UDP может принимать дейтаграммы от нескольких клиентов с помощью функции recvfrom(). Просто заблокируйте при получении, прочитайте запрос, обработайте его, отправьте ответ, повторите. Вам даже не нужен поток, если обработка не займет очень много времени (в этом случае будет работать поток, связанный с двумя очередями, входящей и выходной).

0 голосов
/ 06 апреля 2010

Я бы предположил, что это лучше всего решать, помещая запросы в очередь и позволяя другому потоку работать вне очереди. Это разъединяет сокет, получаемый от процесса, и, таким образом, позволяет масштабировать до большего количества слушателей и потоков обработки, если ваши требования изменяются.

...