changes from erik quanstrom
diff --git a/src/cmd/ndb/dntcpserver.c b/src/cmd/ndb/dntcpserver.c
index 4ae787a..38e3ce7 100644
--- a/src/cmd/ndb/dntcpserver.c
+++ b/src/cmd/ndb/dntcpserver.c
@@ -35,10 +35,10 @@
 	if (lfd < 0)
 		return -1;
 	*fd = accept(lfd, ldir);
-	n = -1;
-	if (*fd < 0)
+	if (*fd >= 0)
 		n = readmsg(*fd, buf, max);
-	//close(fd);
+	else
+		n = -1;
 	close(lfd);
 	return n;
 }
@@ -181,7 +181,7 @@
 void
 tcpproc(void *v)
 {
-	int len;
+	int len, rv;
 	Request req;
 	DNSmsg reqmsg, repmsg;
 	char *err;
@@ -191,7 +191,7 @@
 	NetConnInfo *caller;
 
 	rfd = -1;
-	fd = (int)v;
+	fd = (uintptr)v;
 	caller = 0;
 	/* loop on requests */
 	for(;; putactivity()){
@@ -244,12 +244,13 @@
 					break;
 			} else {
 				dnserver(&reqmsg, &repmsg, &req);
-				if(reply(rfd, &repmsg, &req, caller) < 0)
-					break;
+				rv = reply(rfd, &repmsg, &req, caller);
 				rrfreelist(repmsg.qd);
 				rrfreelist(repmsg.an);
 				rrfreelist(repmsg.ns);
 				rrfreelist(repmsg.ar);
+				if(rv < 0)
+					break;
 			}
 		}
 
@@ -264,8 +265,6 @@
 	Maxactivetcp = 4,
 };
 
-extern char *portname;
-
 static int
 tcpannounce(char *mntpt)
 {
@@ -283,12 +282,10 @@
 dntcpserver(void *v)
 {
 	int i, fd;
-	char *mntpt;
 
-	mntpt = v;
-	while((fd = tcpannounce(mntpt)) < 0)
+	while((fd = tcpannounce(v)) < 0)
 		sleep(5*1000);
 
 	for(i=0; i<Maxactivetcp; i++)
-		proccreate(tcpproc, (void*)fd, STACK);
+		proccreate(tcpproc, (void*)(uintptr)fd, STACK);
 }