]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon/worker: set query source addr for tcp
authorMarek Vavrusa <marek@vavrusa.com>
Tue, 27 Sep 2016 20:14:36 +0000 (20:14 +0000)
committerMarek Vavrusa <marek@vavrusa.com>
Tue, 27 Sep 2016 20:14:36 +0000 (20:14 +0000)
daemon/worker.c

index c07e5c9e1c575ebe6c3afcf1b39ad7fce7f8be21..97906d6cf1a2dd23adb5069c756934ee121cb9e7 100644 (file)
@@ -917,7 +917,12 @@ int worker_process_tcp(struct worker_ctx *worker, uv_stream_t *handle, const uin
         * to buffer incoming message until it's complete. */
        if (!session->outgoing) {
                if (!task) {
-                       task = qr_task_create(worker, (uv_handle_t *)handle, NULL);
+                       /* Get TCP peer name, keep zeroed address if it fails. */
+                       struct sockaddr_storage addr;
+                       memset(&addr, 0, sizeof(addr));
+                       int addr_len = sizeof(addr);
+                       uv_tcp_getpeername((uv_tcp_t *)handle, (struct sockaddr *)&addr, &addr_len);
+                       task = qr_task_create(worker, (uv_handle_t *)handle, (struct sockaddr *)&addr);
                        if (!task) {
                                return kr_error(ENOMEM);
                        }