From: Miek Gieben Date: Thu, 27 Jan 2005 13:01:47 +0000 (+0000) Subject: universal v4/6 upd send function is there X-Git-Tag: release-0.50~518 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=601f22715686c1e12f2b05fff7f35903ce79fc8f;p=thirdparty%2Fldns.git universal v4/6 upd send function is there --- diff --git a/ldns/packet.h b/ldns/packet.h index f3c30fc7..941d92c0 100644 --- a/ldns/packet.h +++ b/ldns/packet.h @@ -136,4 +136,6 @@ ldns_pkt *ldns_pkt_new(); */ void ldns_pkt_free(ldns_pkt *packet); +#define MAX_PACKET_SIZE 65535 + #endif /* !_LDNS_PACKET_H */ diff --git a/net.c b/net.c index e8c93774..34a6be23 100644 --- a/net.c +++ b/net.c @@ -128,21 +128,49 @@ ldns_send(ldns_resolver *r, ldns_pkt *query_pkt) case 1: /*LDNS_RESOLVER_FL_TCP:*/ break; } + return NULL; } -#if 0 /** */ ldns_buffer * -ldns_send_udp(ldns_buffer *qbin, const struct sockaddr *from, socklen_t fromlen, - const struct sockaddr *to, socklen_t tolen) +ldns_send_udp(ldns_buffer *qbin, const struct sockaddr *to, socklen_t tolen) { int sockfd; + ssize_t bytes; + ldns_buffer *answer; + + if ((sockfd = socket(to->sa_family, SOCK_DGRAM, IPPROTO_UDP)) == -1) { + return NULL; + } + + bytes = sendto(sockfd, ldns_buffer_begin(qbin), + ldns_buffer_capacity(qbin), 0, to, tolen); - sockfd = socket( + if (bytes == -1) { + close(sockfd); + return NULL; + } + if ((size_t) bytes != ldns_buffer_capacity(qbin)) { + close(sockfd); + return NULL; + } + /* wait for an response*/ + answer = ldns_buffer_new(MAX_PACKET_SIZE); + bytes = recv(sockfd, ldns_buffer_begin(answer), + MAX_PACKET_SIZE, 0); + + close(sockfd); + if (bytes == -1) { + ldns_buffer_free(answer); + return NULL; + } + /* resize accordingly */ + ldns_buffer_set_capacity(answer, (size_t) bytes); + + return answer; } -#endif