getaddrinfo()
От: alias1  
Дата: 06.03.06 14:42
Оценка:
Доброго времени суток,

Вопрос по замечательной функцци getaddrinfo()

Когда пытаюсь через неё вызнать ip и номер стандартного порта на сервере (http, ftp ...), все проходит отлично: под снифером видно что в сеть уходит DNS запрос и приходит ответ...функция завершается успешно

char* ip = "sss.ru";
char* port = "http";

memset(&aiHints, 0, sizeof(aiHints));
aiHints.ai_family = PF_UNSPEC;

if ((retVal = getaddrinfo(ip, port, &aiHints, &aiList)) != 0) {
DWORD error = WSAGetLastError();
printf("getaddrinfo() failed.\n");
}


однако достаточно поменять порт на нестандартный, к примеру:

char* port = "802-11-iapp";

функция валится не посылая не какого DNS запроса (при том что сервис на сервере в действительности есть)...

Спасибо
Re: getaddrinfo()
От: Аноним  
Дата: 06.03.06 14:48
Оценка:
A> char* port = "802-11-iapp";

A>функция валится не посылая не какого DNS запроса (при том что сервис на сервере в действительности есть)...


A>Спасибо


А если указать порт явно?
Например — char* port = "1234";
Re[2]: getaddrinfo()
От: alias1  
Дата: 06.03.06 14:58
Оценка:
Тоды все работает...Но токо хотелось бы совсем избавиться от жесткой привязки к номеру ip и порта...
Re: getaddrinfo()
От: DOOM Россия  
Дата: 07.03.06 07:17
Оценка:
Здравствуйте, alias1, Вы писали:



A>однако достаточно поменять порт на нестандартный, к примеру:


A> char* port = "802-11-iapp";


A>функция валится не посылая не какого DNS запроса (при том что сервис на сервере в действительности есть)...


Для начала с каким кодом ошибки она валится?
Re[2]: getaddrinfo()
От: alias1  
Дата: 07.03.06 07:35
Оценка:
WSATYPE_NOT_FOUND
10109
Class type not found.
The specified class was not found.
Re[3]: getaddrinfo()
От: DOOM Россия  
Дата: 07.03.06 07:51
Оценка:
Здравствуйте, alias1, Вы писали:

A>WSATYPE_NOT_FOUND

A>10109
A>Class type not found.
A>The specified class was not found.


В общем версия: если отсылки на DNS нет, и возвращается такая ошибка, то:
Видимо разрешения номера порта происходит по /etc/services... Соответственно стоит попробовать внести этот сервис туда (понимаю, что это аналогично жесткому указанию номера порта, но хотя бы поможет понять там ли проблема).

И вопрос... Когда сервис стандартный, что конкретно посылается на DNS (разрешение имени в ip или все таки поиск SRV записи для данного сервиса)?
Re[4]: getaddrinfo()
От: alias1  
Дата: 07.03.06 09:08
Оценка:
DOO>И вопрос... Когда сервис стандартный, что конкретно посылается на DNS (разрешение имени в ip или все таки поиск SRV записи для данного сервиса)?

DNS Standard Query A — т.е. первое

DOO>В общем версия: если отсылки на DNS нет, и возвращается такая ошибка, то:

DOO>Видимо разрешения номера порта происходит по /etc/services... Соответственно стоит DOO>попробовать внести этот сервис туда (понимаю, что это аналогично жесткому указанию DOO>номера порта, но хотя бы поможет понять там ли проблема).

Проблема на виндах наблюдается — под линухом протестить к сожалению возможности нету — если знаешь где в винде аналог /etc/services подскажи плиз...

Но я тож к этой версии склоняюсь...такое ощущение что в вызове этой функции вместо универсального формирователя DNS SRV запросов зашита жесткая табличка портов имена которых винда знает...

2й вариант — что у меня на винде DNS не прально настроен...
Re[5]: getaddrinfo()
От: DOOM Россия  
Дата: 07.03.06 09:15
Оценка:
Здравствуйте, alias1, Вы писали:



A>Проблема на виндах наблюдается — под линухом протестить к сожалению возможности нету — если знаешь где в винде аналог /etc/services подскажи плиз...


%SystemRoot%\System32\drivers\etc\services
Re[6]: getaddrinfo()
От: alias1  
Дата: 07.03.06 10:00
Оценка:
DOO>%SystemRoot%\System32\drivers\etc\services

Во первых полюбе спасибо что просветил о наличии такого файла...

Во вторых В файле действительно не указаны те порты которые мне нужны...

Я его соотв. подредактировал — и это только усугубило ситуацию — теперь getaddrinfo просто вываливается по экспешну Access Vialation гдето в Kernel32...
Re[7]: getaddrinfo()
От: DOOM Россия  
Дата: 07.03.06 12:17
Оценка:
Здравствуйте, alias1, Вы писали:


A>Я его соотв. подредактировал — и это только усугубило ситуацию — теперь getaddrinfo просто вываливается по экспешну Access Vialation гдето в Kernel32...




Теряюсь в догадках....
Re[8]: getaddrinfo()
От: Аноним  
Дата: 08.03.06 10:22
Оценка:
Здравствуйте, DOOM, Вы писали:

DOO>Здравствуйте, alias1, Вы писали:



A>>Я его соотв. подредактировал — и это только усугубило ситуацию — теперь getaddrinfo просто вываливается по экспешну Access Vialation гдето в Kernel32...


DOO>


DOO>Теряюсь в догадках....


Ставь НОМЕРА портов, нафиг тебе название сервисов?
Re[9]: getaddrinfo()
От: alias1  
Дата: 09.03.06 06:56
Оценка:
А>Ставь НОМЕРА портов, нафиг тебе название сервисов?

Короч, вопрос звучит так:

— Можно ли через сокетные функции разрешения имен (getaddrinfo и т.п.) посылать DNS RR SRV — что требуется для соответсвия протоколу который реализую...

Когда указываем порт цифрой — посылается DNS A
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.