* Fix #92: ldns-testns.c:429:15: error: 'fork' is unavailable: not
available on tvOS.
* Fix for #93: fix packaging/libldns.pc Makefile rule.
+ * ldns-testns can answer several queries over one tcp connection,
+ if they arrive within 100msec of each other.
1.7.1 2019-07-26
* bugfix: Manage verification paths for OpenSSL >= 1.1.0
}
userdata.s = s;
- /* tcp recv */
- if (read_n_bytes(s, (uint8_t*)&tcplen, sizeof(tcplen)))
- return;
- tcplen = ntohs(tcplen);
- if(tcplen >= INBUF_SIZE) {
- log_msg("query %d bytes too large, buffer %d bytes.\n",
- tcplen, INBUF_SIZE);
+ while(1) {
+ /* tcp recv */
+ if (read_n_bytes(s, (uint8_t*)&tcplen, sizeof(tcplen)))
+ return;
+ tcplen = ntohs(tcplen);
+ if(tcplen >= INBUF_SIZE) {
+ log_msg("query %d bytes too large, buffer %d bytes.\n",
+ tcplen, INBUF_SIZE);
#ifndef USE_WINSOCK
- close(s);
+ close(s);
#else
- closesocket(s);
+ closesocket(s);
#endif
- return;
- }
- if (read_n_bytes(s, inbuf, tcplen))
- return;
+ return;
+ }
+ if (read_n_bytes(s, inbuf, tcplen))
+ return;
+
+ handle_query(inbuf, (ssize_t) tcplen, entries, count, transport_tcp,
+ send_tcp, &userdata, do_verbose?logfile:0);
+ /* another query straight away? */
+ if(1) {
+ fd_set rset;
+ struct timeval tv;
+ int ret;
+ FD_ZERO(&rset);
+ FD_SET(s, &rset);
+ tv.tv_sec = 0;
+ tv.tv_usec = 100*1000;
+ ret = select(s+1, &rset, NULL, NULL, &tv);
+ if(ret < 0) {
+ error("select(): %s\n", strerror(errno));
+ }
+ if(ret == 0) {
+ /* timeout */
+ break;
+ }
+ }
- handle_query(inbuf, (ssize_t) tcplen, entries, count, transport_tcp,
- send_tcp, &userdata, do_verbose?logfile:0);
+ }
#ifndef USE_WINSOCK
close(s);
#else