aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@nginx.com>2018-05-23 10:41:38 +0300
committerRuslan Ermilov <ru@nginx.com>2018-05-23 10:41:38 +0300
commit4ac8036e78aeb95fe85e41d45caf82722f8e2d07 (patch)
tree0ef5de819e278fd00e7d7fe0f6131f7d0842aeb6 /src
parent4fca5bf1e120c074270c93e8165d3b2dffc90499 (diff)
downloadnginx-4ac8036e78aeb95fe85e41d45caf82722f8e2d07.tar.gz
nginx-4ac8036e78aeb95fe85e41d45caf82722f8e2d07.zip
Resolver: close UDP socket on error or incomplete send.
Diffstat (limited to 'src')
-rw-r--r--src/core/ngx_resolver.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index 5365e9f41..f904091bf 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -1300,15 +1300,22 @@ ngx_resolver_send_udp_query(ngx_resolver_t *r, ngx_resolver_connection_t *rec,
n = ngx_send(rec->udp, query, qlen);
if (n == NGX_ERROR) {
- return NGX_ERROR;
+ goto failed;
}
if ((size_t) n != (size_t) qlen) {
ngx_log_error(NGX_LOG_CRIT, &rec->log, 0, "send() incomplete");
- return NGX_ERROR;
+ goto failed;
}
return NGX_OK;
+
+failed:
+
+ ngx_close_connection(rec->udp);
+ rec->udp = NULL;
+
+ return NGX_ERROR;
}