Это помогло бы, если бы вы предоставили более подробную информацию.На какой платформе вы запускали приложение?Какую версию библиотеки ACE вы используете?Был ли это порт UDP в диапазоне 1-1024?Используете ли вы широковещательный сокет UDP?
Предположим, что поскольку вы проверяете «errno», а не GetLastError (), вы работаете в среде UNIX, такой как Linux.Глядя на OS_S_errno.inl, вы можете найти комментарии, которые описывают разницу в поведении между различными ОС.
Вы не спрашиваете, почему вы получаете EADDRINUSE для UDP-сокета.Вы используете опцию SO_REUSEADDR?Если вы это сделаете, вы должны знать, что только последний процесс, связанный с сокетом, будет уведомлен, и поведение может отличаться в разных ОС.
Возможно ли, что после bind () был выполнен другой вызов системной функции?В этом случае ошибка, возвращаемая bind (), может быть сброшена последующим системным вызовом.Как вы можете видеть из реализации last_error (), он просто устанавливает «errno = :: GetLastError ()» в окнах и возвращает errno прямо в UNIX.