Отправка из одного и того же сокета UDP в несколько потоков - PullRequest
3 голосов
/ 11 августа 2010

У меня есть несколько потоков, которые должны отправлять пакеты UDP на разные IP-адреса (только для отправки, ничего не нужно получать).Могу ли я использовать один и тот же сокет UDP во всех потоках?

Ответы [ 2 ]

3 голосов
/ 11 августа 2010

Да, я думаю, что вы можете.

Поскольку пакеты отправляются индивидуально, хотя порядок их получения будет недетерминированным, он уже с UDP.

Таким образом, отправка в несколькопотоки в одном и том же сокете - это нормально.

Хотя, если вы делаете с сокетом другие вещи, такие как bind (), close (), вы можете столкнуться с условиями гонки, так что вы можете захотетьбыть осторожным.

2 голосов
/ 11 августа 2010

Системные вызовы должны быть атомарными, поэтому формально это нормально для UDP.Тогда в ядрах тоже есть ошибки, и вы приглашаете на неприятные сюрпризы.Почему вы не можете использовать сокет для потока?Это не так с TCP, где вам нужно соединение.В качестве дополнительного бонуса вы получите отдельный буфер отправки для каждого дескриптора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...