Problem with gethostbyname - can't find any!
I have the following visual c++ code. It's taken from Beej's guide to
network programming, and modified a little foruse with winsock. But
gethostbyname just doesn't work, not for localhost nor any other ala
http://google.com
CODE:
#include "stdafx.h"
#include <winsock.h>
#include <iostream>
#define BACKLOG 1
#define MYPORT 18999
#define PORT 18999 // the port client will be connecting to
#define MAXDATASIZE 100 // max number of bytes we can get at once
class WSAInitializer // Winsock Initializer
{
public:
WSAInitializer() {
if (WSAStartup(0x101,&m_wsadata))
{
exit(-1);
}
}
~WSAInitializer() {
WSACleanup();
}
private:
WSADATA m_wsadata;
};
int _tmain(int argc, _TCHAR* argv[])
{
WSAInitializer* WSAINIT=new WSAInitializer;
SOCKET sockfd, numbytes;
char buf[MAXDATASIZE];
struct hostent *he;
struct sockaddr_in their_addr; // connector's address information
if (argc != 2) {
fprintf(stderr,"usage: client hostname\n");
exit(1);
}
if ((he=gethostbyname((char*)argv[1])) == NULL) { // get the host
info
std::cout<<WSAGetLastError();
perror("gethostbyname");
exit(1);
}
if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}
their_addr.sin_family = AF_INET; // host byte order
their_addr.sin_port = htons(PORT); // short, network byte order
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
memset(their_addr.sin_zero, '\0', sizeof their_addr.sin_zero);
if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof
their_addr) == -1) {
perror("connect");
exit(1);
}
if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
perror("recv");
exit(1);
}
buf[numbytes] = '\0';
printf("Received: %s",buf);
closesocket(sockfd);
return 0;
}
Do you see any problems with the above code? I'm nearly 100% sure the
error isn't caused by my local machine.
When running it like client.exe localhost it gives the Winsock error
code 11001 aka host not found.
Any suggestions?