[win] gethostname не работает

Fragaria

Народ, подскажите, почему может быть такое, что кусок кода

//*****************************************************************************
// NAME : GetHostInfo
// DESCRIPTION : Retrieve the systems host information - Ip address etc
// INPUT : None
// OUTPUT : None
// RETURNS : -1 if the app failed or 0 if the app succeeded
// CAUTIONS : None
//*****************************************************************************
int GetHostInfo(char *a_cIpAddrInDotNotation, unsigned long *a_IpAddrInByteOrder)
{
// retrieve the server IP address to use for Call Control
// we will use the first enabled NIC
char hostname[GCNAME_MAXSIZE];
if gethostname(hostname, GCNAME_MAXSIZE < 0)
{
printf("ERROR: Could not read host name information. Exiting...%d\n", errno);
return -1;
}

//printf("Host Name = %s, IP Address: ", hostname);
struct hostent *hp;
hp = gethostbyname(hostname);
struct in_addr in;
char **p;
for (p = hp->h_addr_list; *p != 0; p++)
{
(void) memcpy(&in.s_addr, *p, sizeof (in.s_addr;
// (void) printf("%s\t%s\n", inet_ntoa(in hp->h_name);
strcpy(a_cIpAddrInDotNotation, inet_ntoa(in;
(void) memcpy(a_IpAddrInByteOrder, *p, sizeof (in.s_addr;
//for (q = hp->h_aliases; *q != 0; q++)
// (void) printf(" %s", *q);
//(void) putchar('\n');
}
return 0;
}

Выводит
ERROR: Could not read host name information. Exiting...0
?
Я к сожалению не могу скомпилить заново эту программу и проверить её дебагом, есть отдельно скомпиленная её версия и есть исходники (программа лежит на сервере, где студию поставить довольно сложно, а на локальном компе нет соответствующего оборудования, для работы с которым она предназначена, так что она не запустится).
В чём может быть проблема? Обязательно ли её компилировать именно на той машине, где будем запускать?

kokoc88

В чём может быть проблема?
Зависит от контекста. Ошибку нельзя посмотреть через errno.
If no error occurs, gethostname returns zero. Otherwise, it returns SOCKET_ERROR and a specific error code can be retrieved by calling WSAGetLastError.
WSANOTINITIALISED
A successful WSAStartup call must occur before using this function.

WSAENETDOWN
The network subsystem has failed.

WSAEINPROGRESS
A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function.

Fragaria

Эх, мсдн я уже почитал... интересно, может кто причину назвать может, куда хоть копать...
Я просто на C не программировал ни разу, потому и мучаюсь так...

Dasar

программа лежит на сервере, где студию поставить довольно сложно
поставь туда remote debugger

Dasar

В чём может быть проблема?
что угодно. код ошибки нужен
может проблема в том, что WSAStartup не вызывался

Fragaria

Лол, в исходниках программы вообще нет строки WSAStartup.

Dasar

Лол, в исходниках программы вообще нет строки WSAStartup.
WSAStartup может еще через оберточные вызовы делаться, но по памяти их не помню

klyv

лучше сделай отладочный всякий вывод (типа, конкретный код ошибки коль удалённо отлаживать не хоцца/не могётся.
иначе это - гадание на кофейной гуще.

Fragaria

Короче, выходит, что
WSANOTINITIALISED (10093)
Successful WSAStartup not yet performed.
Either the application has not called WSAStartup or WSAStartup failed. The application may be accessing a socket that the current active task does not own (that is, trying to share a socket between tasks or WSACleanup has been called too many times
С чем это может быть связано, если учесть, что, по утверждениям производителя этой проги и дистрибьютеров, у них всё работает?

kokoc88

С чем это может быть связано, если учесть, что, по утверждениям производителя этой проги и дистрибьютеров, у них всё работает?
Это связано с тем, что у производителей WSAStartup вызывается, а у вас на сервере - нет.
Вот так. (С) CO

Fragaria

Это как так? Программа - то одна и та же :)

kokoc88

Это как так? Программа - то одна и та же
Ну мало ли где они вызывают WSAStartup? COM объект, DLL какая-нибудь, что угодно.

klyv

таки стоит сделать удалённую отладку, чтобы отловить, где делается неуспешный вызов искомой функции ядра.

Fragaria

Я тупо не умею :) Студию открыл первый раз в жизни сегодня. Так что не судьба видимо.

klyv

Я тупо не умею Студию открыл первый раз в жизни сегодня. Так что не судьба видимо.
Открой первый раз в жизни MSDN и прочитай там, как просто поставить Remote debugger и как просто им пользоваться.
Оставить комментарий
Имя или ник:
Комментарий: