Поскольку вы работаете в Linux / Unix, это именно та ситуация, для решения которой был разработан RPM portmapper. Ваш сервер bind()
s подключается к неиспользуемому порту (порт 0), затем регистрирует результирующий фактический порт (выбирается с помощью getsockname()
с помощью portmapper по имени приложения / службы.
Затем клиенты запрашивают portmapper на своем известном порте, спрашивая, на каком порту в действительности работает названная служба.
RPC portmapper не так популярен, как раньше
Если серверы и клиенты находятся в одном окне:
Другой альтернативой является использование какой-либо схемы именования для общего файла (создайте временный файл /tmp/servport.xxxxx), заменив xxxxx на порт.
Или вы можете создать сегмент разделяемой памяти, в который сервер сохраняет свой порт. Клиенты будут подключаться к той же общей памяти, читать порт и подключаться как обычно.
Или ваш сервер может создать сокет домена unix по известному / общему пути, и клиенты могут подключиться к нему, спрашивая, на каком порту находится сервер. (очевидно, вы могли бы просто сделать все IPC таким образом, если они оба локальные!)
Множество опций с IPC ...