summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2010-09-24 20:39:51 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2010-09-24 20:40:20 +0200
commit4990defa7cdf73d79660a12af31620f67a2ddbf1 (patch)
tree44920a253b04b7dbe6313e22a06f3f471c1ab417 /plugins
parent81e5198222aae4f4c7f0b243c09a602c452a813a (diff)
downloadconnman-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.c10
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);
}