1 diff -ur djbdns-1.05/Makefile djbdns-1.05-multiip/Makefile
2 --- djbdns-1.05/Makefile Sun Feb 11 21:11:45 2001
3 +++ djbdns-1.05-multiip/Makefile Thu Feb 15 14:49:06 2001
8 -load pickdns.o server.o response.o droproot.o qlog.o prot.o dns.a \
9 +load pickdns.o server.o iopause.o response.o droproot.o qlog.o prot.o dns.a \
10 env.a libtai.a cdb.a alloc.a buffer.a unix.a byte.a socket.lib
11 - ./load pickdns server.o response.o droproot.o qlog.o \
12 + ./load pickdns server.o iopause.o response.o droproot.o qlog.o \
13 prot.o dns.a env.a libtai.a cdb.a alloc.a buffer.a unix.a \
14 byte.a `cat socket.lib`
20 -load rbldns.o server.o response.o dd.o droproot.o qlog.o prot.o dns.a \
21 +load rbldns.o server.o iopause.o response.o dd.o droproot.o qlog.o prot.o dns.a \
22 env.a libtai.a cdb.a alloc.a buffer.a unix.a byte.a socket.lib
23 - ./load rbldns server.o response.o dd.o droproot.o qlog.o \
24 + ./load rbldns server.o iopause.o response.o dd.o droproot.o qlog.o \
25 prot.o dns.a env.a libtai.a cdb.a alloc.a buffer.a unix.a \
26 byte.a `cat socket.lib`
29 compile server.c byte.h case.h env.h buffer.h strerr.h ip4.h uint16.h \
30 ndelay.h socket.h uint16.h droproot.h qlog.h uint16.h response.h \
31 uint32.h dns.h stralloc.h gen_alloc.h iopause.h taia.h tai.h uint64.h \
33 +taia.h iopause.h alloc.h
38 ./compile timeoutwrite.c
41 -load tinydns.o server.o droproot.o tdlookup.o response.o qlog.o \
42 +load tinydns.o server.o iopause.o droproot.o tdlookup.o response.o qlog.o \
43 prot.o dns.a libtai.a env.a cdb.a alloc.a buffer.a unix.a byte.a \
45 - ./load tinydns server.o droproot.o tdlookup.o response.o \
46 + ./load tinydns server.o iopause.o droproot.o tdlookup.o response.o \
47 qlog.o prot.o dns.a libtai.a env.a cdb.a alloc.a buffer.a \
48 unix.a byte.a `cat socket.lib`
50 @@ -1084,10 +1084,10 @@
54 -load walldns.o server.o response.o droproot.o qlog.o prot.o dd.o \
55 +load walldns.o server.o iopause.o response.o droproot.o qlog.o prot.o dd.o \
56 dns.a env.a cdb.a alloc.a buffer.a unix.a byte.a socket.lib
57 - ./load walldns server.o response.o droproot.o qlog.o \
58 - prot.o dd.o dns.a env.a cdb.a alloc.a buffer.a unix.a \
59 + ./load walldns server.o iopause.o response.o droproot.o qlog.o \
60 + prot.o dd.o dns.a libtai.a env.a cdb.a alloc.a buffer.a unix.a \
61 byte.a `cat socket.lib`
64 diff -ur djbdns-1.05/server.c djbdns-1.05-multiip/server.c
65 --- djbdns-1.05/server.c Sun Feb 11 21:11:45 2001
66 +++ djbdns-1.05-multiip/server.c Thu Feb 15 16:30:33 2001
75 extern char *starting;
82 + strerr_die2x(111,fatal,"out of memory");
100 strerr_die2x(111,fatal,"$IP not set");
101 - if (!ip4_scan(x,ip))
102 - strerr_die3x(111,fatal,"unable to parse IP address ",x);
104 - udp53 = socket_udp();
106 - strerr_die2sys(111,fatal,"unable to create UDP socket: ");
107 - if (socket_bind4_reuse(udp53,ip,53) == -1)
108 - strerr_die2sys(111,fatal,"unable to bind UDP socket: ");
114 + l=ip4_scan(x+off,dummy);
116 + strerr_die3x(111,fatal,"unable to parse IP address ",x+off);
118 + if (!x[off+l]) break;
119 + if ((x[off+l]!=',') && (x[off+l]!='/'))
120 + strerr_die3x(111,fatal,"unable to parse IP address ",x+off);
123 + udp53=(int *) alloc(sizeof(int) *cnt);
124 + if (!udp53) nomem();
125 + iop=(iopause_fd *) alloc(sizeof(*iop) * cnt);
132 + l=ip4_scan(x+off,ip);
133 + udp53[cnt] = socket_udp();
134 + if (udp53[cnt] == -1)
135 + strerr_die2sys(111,fatal,"unable to create UDP socket: ");
136 + if (socket_bind4_reuse(udp53[cnt],ip,53) == -1)
137 + strerr_die2sys(111,fatal,"unable to bind UDP socket: ");
138 + ndelay_off(udp53[cnt]);
139 + socket_tryreservein(udp53[cnt],65536);
140 + iop[cnt].fd=udp53[cnt];
141 + iop[cnt].events=IOPAUSE_READ;
143 + if (!x[off+l]) break;
152 - socket_tryreservein(udp53,65536);
154 buffer_putsflush(buffer_2,starting);
158 - len = socket_recv4(udp53,buf,sizeof buf,ip,&port);
159 - if (len < 0) continue;
160 - if (!doit()) continue;
161 - if (response_len > 512) response_tc();
162 - socket_send4(udp53,response,response_len,ip,port);
163 - /* may block for buffer space; if it fails, too bad */
165 + struct taia deadline;
168 + taia_uint(&deadline,300);
169 + taia_add(&deadline,&deadline,&stamp);
170 + iopause(iop,cnt,&deadline,&stamp);
171 + for (i=0;i<cnt;i++)
172 + if (iop[i].revents) {
173 + len = socket_recv4(udp53[i],buf,sizeof buf,ip,&port);
174 + if (len < 0) continue;
175 + if (!doit()) continue;
176 + if (response_len > 512) response_tc();
177 + socket_send4(udp53[i],response,response_len,ip,port);
178 + /* may block for buffer space; if it fails, too bad */