diff --git a/daemon/io.c b/daemon/io.c
index 666e929bed120cad17cd2966bf81c5bec0298a58..f41aa38ddcedffe851215752324bf9b235e0e94a 100644
--- a/daemon/io.c
+++ b/daemon/io.c
@@ -224,7 +224,8 @@ static void tcp_recv(uv_stream_t *handle, ssize_t nread, const uv_buf_t *buf)
 				uv_timer_start(&s->timeout, tcp_timeout_trigger, 1, KR_CONN_RTT_MAX/2);
 			}
 		}
-	/* Connection spawned more than one request, reset its deadline for next query. */
+	/* Connection spawned at least one request, reset its deadline for next query.
+	 * https://tools.ietf.org/html/rfc7766#section-6.2.3 */
 	} else if (ret > 0 && !s->outgoing) {
 		uv_timer_again(&s->timeout);
 	}
diff --git a/daemon/io.h b/daemon/io.h
index 5bf94d59f04381a906fe978617630bd50bff88f2..0979f4260d6ae8ccda14792042af4b015283b5fe 100644
--- a/daemon/io.h
+++ b/daemon/io.h
@@ -31,7 +31,7 @@ struct session {
 	bool throttled;
 	bool has_tls;
 	uv_timer_t timeout;
-	struct qr_task *buffering;
+	struct qr_task *buffering; /**< Worker buffers the incomplete TCP query here. */
 	struct tls_ctx_t *tls_ctx;
 	array_t(struct qr_task *) tasks;
 };
diff --git a/daemon/tls.h b/daemon/tls.h
index c0d1836c8d8084e433954750046b6bcffedc69d7..d86d4c68212ba4b156c0d9495e27685aa5e19f53 100644
--- a/daemon/tls.h
+++ b/daemon/tls.h
@@ -46,7 +46,9 @@ void tls_free(struct tls_ctx_t* tls);
 /*! Push new data to TLS context for sending */
 int tls_push(struct qr_task *task, uv_handle_t* handle, knot_pkt_t * pkt);
 
-/*! Unwrap incoming data from a TLS stream and pass them to TCP session. */
+/*! Unwrap incoming data from a TLS stream and pass them to TCP session.
+ * @return the number of newly-completed requests (>=0) or an error code
+ */
 int tls_process(struct worker_ctx *worker, uv_stream_t *handle, const uint8_t *buf, ssize_t nread);
 
 /*! Set TLS certificate and key from files. */
diff --git a/daemon/worker.h b/daemon/worker.h
index bab10fe6f751de0bdb714df79dfb6944a5bd58e1..60fc163fa9881f49cd99ebaafa20b3202e14e3fe 100644
--- a/daemon/worker.h
+++ b/daemon/worker.h
@@ -41,7 +41,7 @@ int worker_submit(struct worker_ctx *worker, uv_handle_t *handle, knot_pkt_t *qu
  * Process incoming DNS/TCP message fragment(s).
  * If the fragment contains only a partial message, it is buffered.
  * If the fragment contains a complete query or completes current fragment, execute it.
- * @return 0 or an error code
+ * @return the number of newly-completed requests (>=0) or an error code
  */
 int worker_process_tcp(struct worker_ctx *worker, uv_stream_t *handle,
 		const uint8_t *msg, ssize_t len);