Как проверить, доступен ли порт - PullRequest
2 голосов
/ 18 ноября 2009

Существует ли функция API в Linux (ядро 2.6.20), которую можно использовать для проверки, используется ли данный порт TCP / IP - привязан и / или подключен?

Является ли bind() единственным решением (привязка к данному порту с использованием сокета с параметром SO_REUSEADDR и последующее его закрытие)?

Ответы [ 3 ]

2 голосов
/ 18 ноября 2009

Хм,

Согласно strace -o trace.out netstat -at

netstat делает это, глядя на

/proc/net/tcp

и

/proc/net/tcp6

Используемые порты указаны в шестнадцатеричном формате во втором поле записей в этом файле.

Вы можете получить состояние соединения, посмотрев на 4-е поле, например, 0A - СЛУШАТЬ, а 01 - УСТАНОВЛЕНО.

1 голос
/ 18 ноября 2009

Святой переносимый API сокета BSD не позволит вам узнать, используется ли порт, прежде чем пытаться выделить его. Не пытайтесь перехитрить API. Я знаю, как это заманчиво, я уже был в такой ситуации. Но любой поверхностно разумный способ сделать это (например, файловая система proc) подвержен незначительным ошибкам, проблемам совместимости в будущем, условиям гонки и т. Д.

0 голосов
/ 18 ноября 2009

Возьмите источник команды netstat и посмотрите, как она выглядит. Тем не менее, вы всегда будете иметь гонку. Кроме того, SO_REUSEADDR не позволит вам использовать порт, который активно использует кто-то другой, конечно, только один в режиме ожидания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...