socsvn commit: r224640 - soc2011/kibab/freebsd-src-head/contrib/bind9/lib/lwres

kibab at FreeBSD.org kibab at FreeBSD.org
Tue Jul 26 07:39:32 UTC 2011


Author: kibab
Date: Tue Jul 26 07:39:31 2011
New Revision: 224640
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=224640

Log:
  Use global socket, not destroying it after each request.

Modified:
  soc2011/kibab/freebsd-src-head/contrib/bind9/lib/lwres/context.c

Modified: soc2011/kibab/freebsd-src-head/contrib/bind9/lib/lwres/context.c
==============================================================================
--- soc2011/kibab/freebsd-src-head/contrib/bind9/lib/lwres/context.c	Tue Jul 26 04:33:00 2011	(r224639)
+++ soc2011/kibab/freebsd-src-head/contrib/bind9/lib/lwres/context.c	Tue Jul 26 07:39:31 2011	(r224640)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: context.c,v 1.50.332.5 2009-09-01 23:47:05 tbox Exp $ */
+/* $Id: context.c,v 1.50.332.5 2009/09/01 23:47:05 tbox Exp $ */
 
 /*! \file context.c
    lwres_context_create() creates a #lwres_context_t structure for use in
@@ -131,6 +131,8 @@
 LIBLWRES_EXTERNAL_DATA lwres_uint16_t lwres_udp_port = LWRES_UDP_PORT;
 LIBLWRES_EXTERNAL_DATA const char *lwres_resolv_conf = LWRES_RESOLV_CONF;
 
+static int glob_socket = 0;
+
 static void *
 lwres_malloc(void *, size_t);
 
@@ -218,7 +220,7 @@
 	ctx = *contextp;
 	*contextp = NULL;
 
-	if (ctx->sock != -1) {
+	if (ctx->sock != -1 && !glob_socket) {
 #ifdef WIN32
 		DestroySockets();
 #endif
@@ -331,32 +333,41 @@
 #ifdef WIN32
 	InitSockets();
 #endif
-	s = socket(domain, SOCK_DGRAM, IPPROTO_UDP);
-	if (s < 0) {
+
+	if(glob_socket==0) {
+		printf("Creating new socket!!!\n");
+		s = socket(domain, SOCK_DGRAM, IPPROTO_UDP);
+		if (s < 0) {
 #ifdef WIN32
-		DestroySockets();
+			DestroySockets();
 #endif
-		return (LWRES_R_IOERROR);
-	}
+			return (LWRES_R_IOERROR);
+		}
 
-	ret = connect(s, sa, salen);
-	if (ret != 0) {
+		ret = connect(s, sa, salen);
+		if (ret != 0) {
 #ifdef WIN32
-		DestroySockets();
+			DestroySockets();
 #endif
-		(void)close(s);
-		return (LWRES_R_IOERROR);
-	}
+			(void)close(s);
+			return (LWRES_R_IOERROR);
+		}
 
-	MAKE_NONBLOCKING(s, ret);
-	if (ret < 0) {
+		MAKE_NONBLOCKING(s, ret);
+		if (ret < 0) {
 #ifdef WIN32
-		DestroySockets();
+			DestroySockets();
 #endif
-		(void)close(s);
-		return (LWRES_R_IOERROR);
-	}
+			(void)close(s);
+			return (LWRES_R_IOERROR);
 
+			//glob_socket = s;
+		}
+	glob_socket = s;
+	} else {
+		printf("Reusing existing socket!\n");
+		s = glob_socket;
+	}
 	ctx->sock = s;
 
 	return (LWRES_R_SUCCESS);


More information about the svn-soc-all mailing list