- Question:
 
The getaddrinfo() does not translate a hostname into an IP address and consequently does not connect() to server. Is something wrong with my implementation - compiles with no warning messages?
EDIT:
- Is this function call to connect correct?
 
...
connect(client, result->ai_addr, result->ai_addrlen)
...
Full implementation listed below:
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#include <stdio.h>
#include <iostream>
#pragma comment(lib, "Ws2_32.lib")
using namespace std;
int main (
       int argc,
       char* argv[])
{
if (argc != 3)
{
 cerr << "Usage: " << argv[0] << " [hostname] [port number]\n";
 exit(EXIT_FAILURE);
}
WSADATA wsaData;
WORD wVersionRequested;
int wError;
wVersionRequested = MAKEWORD(2, 2);
wError = WSAStartup(wVersionRequested, &wsaData);
if (wError != 0)
{
 cerr << "WSAStartup failed with error: " << wError << endl;
 exit (EXIT_FAILURE);
}
/*
* Confirm that the WinSock DLL supports 2.2.
* Note that if the DLL supports versions greater
* than 2.2 in addition to 2.2, it will still return 
* 2.2 in wVersion since that is the version we 
* requested. 
*/
if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
{
    cerr << "Could not find a usable version of Winsock.dll." << endl;
    WSACleanup();
    exit(EXIT_FAILURE);
} else {
    cout << "The Winsock 2.2 dll was found." << endl;
}
SOCKET client;
if ((client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR)
{
 cerr << "Error: socket() return value == SOCKET_ERROR" << endl;
 WSACleanup();
 exit (EXIT_FAILURE);
}
cout << "Created a socket." << endl;
struct addrinfo *result = NULL;
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
if ((wError = getaddrinfo(
     argv[1],
     argv[2],
     &hints,
     &result)) !=0 )
{
 freeaddrinfo(result);
 WSACleanup();
 if (wError == 11001)
 {
  cerr << "Error: occurred: getaddrinfo() failed "
    << wError << " - Host not found." << endl;
  exit(EXIT_FAILURE);
 }
 cerr << "Error: occurred: getaddrinfo() failed "
   << wError << endl;
 exit(EXIT_FAILURE);
}
/*
* Attempt to connect to the Server
*
*/
switch (wError = connect(client, result->ai_addr, result->ai_addrlen)) {
 case 0:
  cerr << "Resolved hostname." << endl;
  break;
 case SOCKET_ERROR:
  wError = WSAGetLastError();
  cerr << "Error: connet() failed "
    "Details: " << wError << endl;
  closesocket(client);
  freeaddrinfo(result);
  WSACleanup();
  exit(EXIT_FAILURE);
  break;
 default:
  cerr << "Fatal connect() error: unexpected "
    "return value." << endl;
  closesocket(client);
  freeaddrinfo(result);
  WSACleanup();
  exit(EXIT_FAILURE);
  break;
}
cout << "Connected to server." << endl;
closesocket(client);
freeaddrinfo(result);
WSACleanup();
exit(EXIT_SUCCESS);
}