2012-06-21 7 views
3

Я хочу понять, в каком порядке находятся элементы h_addr_list, отсортированные, когда я получаю hostent от gethostbyname.h_addr_list order

В основном, я работаю над очень старой функцией, которая получает структуру hostent от gethostbyname и возвращает h_addr вызывающему абоненту. Я пытаюсь выяснить, какой адрес будет возвращен в случае нескольких активных интерфейсов.

Google и просмотр исходного кода не могли помочь мне здесь. Есть ли документация или какая-либо информация по заказу h_addr_list?

P.S. Я работаю над кодом для Windows и Linux.

+0

Не ответ, потому что я не уверен, что он применим здесь, но для запросов DNS требуется, по крайней мере, обычное «перетасовывать» порядок для каждого запроса, так что если на сервере имеется более одного адреса, все они получат некоторые использовать. Это означает, что порядок по сути является случайным для каждого запроса, а не на том, на что вы можете положиться. – jcoder

+1

Ни официальная страница руководства для ['gethostbyname'] (http://pubs.opengroup.org/onlinepubs/009695399/functions/gethostbyname.html), ни [' '] (http: //pubs.opengroup. org/onlinepubs/009695399/basedefs/netdb.h.html) определяет порядок. Поэтому я предполагаю, что нет порядка и что он может даже меняться между вызовами. –

+2

Если вы возложите руки на эту часть программы, вы должны переписать ее для использования 'getaddrinfo()' и 'getnameinfo()', в зависимости от ситуации. Это сделало бы программу перспективной. – glglgl

ответ

1

Что заставляет вас думать, что есть «заказ» в первую очередь? Что сделало бы какой-нибудь конкретный адрес более достойным быть первым?

Другими словами, я не думаю, что для адресов определен четко определенный порядок. Вы просто получаете все адреса, доступные для системы поиска.

+0

Я понял, что есть некоторый произвольный заказ (то есть самый низкий лексикографический mac-адрес), просто потому, что я предполагаю, что заказ будет предпочтительнее его отсутствия. – Neowizard