Используете ли вы доменный сокет Unix или обычный сетевой сокет?
Какой из процессов, A или B, прослушивает сокет (пассивное открытие), а какой выполняет активное открытие?
Когда вы решите, что A должен запустить B, как код определяет, что это необходимо?
Вы открываете сокет, прежде чем форк и exec?
Мое впечатление от предоставленной информации:
- Вы используете сетевой сокет
- B - слушатель
Но я мог легко ошибиться.
Интересно, сталкивались ли вы с проблемами, потому что A уже создал активный сокет до того, как вы выполните fork и exec B, поэтому активный конец сокета не закрывается чисто, когда A завершается, потому что B имеет копию сокета, открытого для записи а также A. Когда вы выполняете ветвление, дочерний процесс должен очистить ненужные файловые дескрипторы (например, сокеты) перед выполнением другого процесса.