Cannot send DNS request with TCP socket
I am trying to send a DNS request with TCP like this:
// Nameserver address initialization
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_NUMERICHOST;
gaierror = getaddrinfo("8.8.8.8", "53", &hints, &res);
if (gaierror != 0) {
fprintf(stderr, "Failed to parse server address: %s\n", gai_strerror(gaierror));
return;
}
if (res->ai_addrlen > sizeof(sa.type)) {
return;
}
memmove(&sa.type, res->ai_addr, res->ai_addrlen);
freeaddrinfo(res);
sa.length = (unsigned int) res->ai_addrlen;
ISC_LINK_INIT(&sa, link);
...
// Request options
options = DNS_CLIENTREQOPT_ALLOWRUN | DNS_CLIENTRESOPT_TCP;
...
dns_client_request(client, qmessage, rmessage, &sa, options,
0, NULL, timeout, udptimeout, udpretries);
However Wireshark reports that the DNS request is made with UDP.