Проверка, открыт ли порт UDP уже в C

ЯЗЫК: С

Как я могу проверить, открыт ли сокет UDP, чтобы я мог увеличить используемый порт и отправить его в следующий сокет, я понятия не имею, сколько сокетов потребуется серверу. Я также не могу использовать port 0, так как мне нужно начинать с определенного порта. Единственное решение, которое у меня есть прямо сейчас, это либо реализовать мою собственную очередь для отслеживания открытых портов, либо попытаться прочитать /proc/net/udp

Есть ли определенный API? также, если нет, можете ли вы представить пример кода, который будет отслеживать открытые порты, используемые моей программой?


person Ash    schedule 19.11.2014    source источник


Ответы (1)


Если порт уже используется, привязка завершится ошибкой. Если это не удается, вам нужно только увеличить порт, который вы пытаетесь использовать. Затем сохраните его, когда вы захотите использовать следующий порт. Bind возвращает -1 в случае сбоя. Кстати, вы используете линукс? Вы можете установить максимальный и минимальный номер порта, и когда порт, который вы хотите использовать, достигнет максимального значения, установите порт равным минимальному (это самый простой метод). Для других методов потребуется разделяемая память или семафоры и блокировки.

person Luis Alves    schedule 19.11.2014
comment
Я уже реализовал этот while (bind(sockfdstr, (struct sockaddr *)&addr, sizeof addr) <0 ){ `port ++;` `addr.sin_port = htons(port);` `printf(Попытка следующего порта %d\n, порт);` } но я использовал другой сокет (TCP для других операций) поэтому я запутался и подумал, что это не работает - person Ash; 19.11.2014