С++: ошибка gethostname()

Мне нужно получить имя хоста системы, для которого я использую получить имя хоста

Но сбой с кодом ошибки 10093, который

WSANOTINITIALISED 10093

Успешный WSAStartup еще не выполнен. Либо приложение не вызвало WSAStartup, либо WSAStartup завершился неудачно. Возможно, приложение обращается к сокету, которым не владеет текущая активная задача (то есть пытается совместно использовать сокет между задачами), или WSACleanup вызывался слишком много раз.

Ниже мой программный код:

#include <Winsock2.h>
#include <ws2tcpip.h>
#include <Windows.h>    
#pragma comment(lib, "Ws2_32.lib")

int main()
{    
   char hostname[1024];
   hostname[1023] = '\0';
   gethostname(hostname, 1023);
   int err = WSAGetLastError();    
}

Что может быть причиной этого сбоя?


ИЗМЕНИТЬ

Добавление кода ниже перед вызовом функции gethostname решило проблему.

if (WSAStartup (MAKEWORD(2,2), &WSAData) != 0) 
{
  MessageBox (NULL, TEXT("WSAStartup failed!"), TEXT("Error"), MB_OK);
  return FALSE;
}

person foobar    schedule 21.07.2014    source источник
comment
Не забывайте вызывать WSACleanup() для каждого успешного WSAStartup(). Лучше всего вызывать WSAStartup() один раз при запуске приложения, а затем WSACleanup() при выходе из приложения. Но вы можете вызывать WSAStartup() несколько раз в течение жизни приложения, пока вы сохраняете баланс между WSAStartup() и WSACleanup().   -  person Remy Lebeau    schedule 21.07.2014
comment
Вот определение/объявление переменной WSAData: WSADATA WSAData;   -  person Richard Jessop    schedule 26.06.2019


Ответы (3)


В приведенной вами ссылке написано:

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

Позвоните WSAStartup, проверьте его код возврата, если все прошло хорошо, позвоните gethostname.

person Cornelius    schedule 21.07.2014

В сообщении об ошибке все сказано. Вам нужно позвонить WSAStartup перед gethostname: http://msdn.microsoft.com/en-gb/library/windows/desktop/ms742213(v=vs.85).aspx

person Wojtek Surowka    schedule 21.07.2014

Прочтите сообщение об ошибке: приложение не вызвало WSAStartup

person MSalters    schedule 21.07.2014