diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2010-09-24 20:39:51 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-09-24 20:40:20 +0200 |
commit | 4990defa7cdf73d79660a12af31620f67a2ddbf1 (patch) | |
tree | 44920a253b04b7dbe6313e22a06f3f471c1ab417 /plugins | |
parent | 81e5198222aae4f4c7f0b243c09a602c452a813a (diff) | |
download | connman-4990defa7cdf73d79660a12af31620f67a2ddbf1.tar.gz connman-4990defa7cdf73d79660a12af31620f67a2ddbf1.tar.bz2 connman-4990defa7cdf73d79660a12af31620f67a2ddbf1.zip |
Close TCP DNS connections once the reply is forwarded
This is still sub optimal as the ideal solution would be to keep the TCP
connection opened for a 20-30 seconds for the next DNS over TCP requests.
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/dnsproxy.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/plugins/dnsproxy.c b/plugins/dnsproxy.c index a1743937..63c88b98 100644 --- a/plugins/dnsproxy.c +++ b/plugins/dnsproxy.c @@ -422,6 +422,8 @@ static void destroy_server(struct server_data *server) { DBG("interface %s server %s", server->interface, server->server); + server_list = g_slist_remove(server_list, server); + if (server->watch > 0) g_source_remove(server->watch); @@ -430,7 +432,8 @@ static void destroy_server(struct server_data *server) g_io_channel_unref(server->channel); - connman_info("Removing DNS server %s", server->server); + if (server->protocol == IPPROTO_UDP) + connman_info("Removing DNS server %s", server->server); g_free(server->server); g_free(server->domain); @@ -499,7 +502,6 @@ static gboolean tcp_server_event(GIOChannel *channel, GIOCondition condition, request_list = g_slist_remove(request_list, req); } - server_list = g_slist_remove(server_list, server); destroy_server(server); return FALSE; @@ -566,6 +568,8 @@ static gboolean tcp_server_event(GIOChannel *channel, GIOCondition condition, g_free(reply); + destroy_server(server); + return FALSE; } @@ -745,8 +749,6 @@ static void remove_server(const char *interface, const char *domain, if (data == NULL) return; - server_list = g_slist_remove(server_list, data); - destroy_server(data); } |