Несколько параллельных вызовов udp :: socket :: async_receive_from - неопределенное поведение? - PullRequest
1 голос
/ 09 февраля 2011

Я использую boost :: asio для создания серверного приложения, в частности UDP API. Прямо сейчас я запускаю несколько потоков из пула, слушая отдельные буферы, используя async_receive_from. Это прекрасно работает в Ubuntu, где я в основном развиваюсь.

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

Я посмотрел на документы boost :: asio и знаю, что функции без записи / чтения должны вызываться последовательно - но я не смог найти никакой информации о том, верно ли то же самое для функций async_receive_. 1005 *

Должен ли я вместо этого просто вызвать async_receive_ один раз?

1 Ответ

2 голосов
/ 09 февраля 2011

Это верно для всех функций async_xxx, вы никогда не должны вызывать функцию в данном сокете, пока не завершится предыдущий - или вы получите мусор (или неопределенное поведение) ...

РЕДАКТИРОВАТЬ: я работаю на Linux, и я удивлен, что вы видите, что он работает правильно, как я определенно не так.например, вызов async_read_some, очередь на следующее чтение.

...