Я подумал, что я бы использовал Boost.Interprocess Очередь сообщений вместо сокетов для связи внутри одного хоста. Но после изучения этой проблемы, кажется, что эта библиотека по какой-то причине отказывается от возможности очереди сообщений POSIX (которую поддерживает моя система Linux) и вместо этого реализуется поверх общей памяти POSIX. Интерфейс достаточно похож, чтобы вы не могли сразу догадаться об этом, но, похоже, это так.
Недостатком для меня является то, что совместно используемая память, полученная с помощью shm_open(3)
, по-видимому, не может использоваться с select(2)
, в отличие от очередей сообщений POSIX, полученных с помощью mq_open(3)
.
В этом случае библиотека Boost проигрывает. Кто-нибудь понимает, знает, почему это должно быть? Даже если очереди сообщений POSIX доступны только в некоторых системах, я ожидаю, что Boost будет использовать эту возможность там, где она доступна, и переопределять ее только при необходимости. Есть ли какая-то ошибка системы POSIX, которую я еще не распознал?