summaryrefslogtreecommitdiff
path: root/ares_init.c
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2012-05-21 16:25:07 +0200
committerDaniel Stenberg <daniel@haxx.se>2012-05-21 22:40:45 +0200
commit9bd38a4a6e3cc0ffc83585eb41650e300323fb04 (patch)
tree0ffe6ec5bce56591b0f5577cbffcd3a0a8017406 /ares_init.c
parent7ec5e8e6564162ae579efe2cc9e1d311b1e1f6a9 (diff)
downloadc-ares-9bd38a4a6e3cc0ffc83585eb41650e300323fb04.tar.gz
c-ares-9bd38a4a6e3cc0ffc83585eb41650e300323fb04.tar.bz2
c-ares-9bd38a4a6e3cc0ffc83585eb41650e300323fb04.zip
Fix UDP and TCP port byte order in saved options.
The UDP and TCP port are stored in network byte order in the ares_channeldata, but are passed in to ares_init_options() in host byte order. Thus we must return them from ares_save_options() in host byte order too, or a duplicated channel will convert them again, leading to a nonfunctional channel and a mysterious connection refused error from ares_gethostbyname(). This breaks ares_dup(), thus the curl easy API when c-ares is used by curl, and thus all the curl easy API's users.
Diffstat (limited to 'ares_init.c')
-rw-r--r--ares_init.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/ares_init.c b/ares_init.c
index 823bef5..ccdc07a 100644
--- a/ares_init.c
+++ b/ares_init.c
@@ -355,8 +355,8 @@ int ares_save_options(ares_channel channel, struct ares_options *options,
options->timeout = channel->timeout;
options->tries = channel->tries;
options->ndots = channel->ndots;
- options->udp_port = (unsigned short)channel->udp_port;
- options->tcp_port = (unsigned short)channel->tcp_port;
+ options->udp_port = (unsigned short)ntohs(channel->udp_port);
+ options->tcp_port = (unsigned short)ntohs(channel->tcp_port);
options->sock_state_cb = channel->sock_state_cb;
options->sock_state_cb_data = channel->sock_state_cb_data;