I did post some code, but if you really believe that the full code will help, there you go:
Code:
#define DNS_LNT 500
int DnsLookup(char *dns_server, char *host_name, char dns_id, char dns_type, char *msg)
{
int sockfd, numbytes, addr_lnt, tot_lnt;
struct sockaddr_in ina;
tot_lnt = DnsSetMsg(msg, host_name, dns_id, dns_type);
/* this only sets a DNS message and returns the length */
if ((sockfd=socket(AF_INET, SOCK_DGRAM, 0))==-1)
return(0);
ina.sin_family = AF_INET;
ina.sin_port = htons(DNSPORT); // port 53
ina.sin_addr.s_addr = inet_addr(dns_server);
memset(ina.sin_zero, '\0', 8);
if ((numbytes=sendto(sockfd, msg, tot_lnt, 0, (struct sockaddr *)&ina, sizeof(struct sockaddr)))==-1)
return(0);
memset(msg, '\0', DNS_LNT);
addr_lnt = sizeof(struct sockaddr);
if ((numbytes=recvfrom(sockfd, msg, DNS_LNT-1, 0, (struct sockaddr *)&ina, &addr_lnt))==-1)
return(0);
closesocket(sockfd);
if (msg[1]!=dns_id)
return(0);
return(1);
}