Единственный способ узнать наверняка, является ли номер порта «свободным», состоит в том, чтобы фактически попытаться bind()
к нему.
Напомним, что номер порта означает что-то только в контексте определенного адреса интерфейса, поэтому две программы могут прослушивать «один и тот же» номер порта (но по разным адресам). Кроме того, может быть любое количество причин, по которым конкретной программе может быть запрещено слушать определенный порт, включая локальные политики брандмауэра или списки ACL, или любая другая возможная причина.
Если вы хотите прослушивать входящие соединения, просто попробуйте bind()
по адресу и интересующему порту, и вы получите сообщение об ошибке или нет, в зависимости от того, может ли ваше приложение прослушивать этот порт.