]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
universal v4/6 upd send function is there
authorMiek Gieben <miekg@NLnetLabs.nl>
Thu, 27 Jan 2005 13:01:47 +0000 (13:01 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Thu, 27 Jan 2005 13:01:47 +0000 (13:01 +0000)
ldns/packet.h
net.c

index f3c30fc7e196580e82f99729f7e778db47cf9639..941d92c001146ec99f0974f85e60b9f9236377e1 100644 (file)
@@ -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 e8c93774255f2dc97b0cb95761699b1d993b0fee..34a6be230eac1b68d3ae001fd0cb8fc6cf3d9362 100644 (file)
--- 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