From 381efd6da6e85fce4a30857aab729bea30d3e1e0 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Tue, 11 Feb 2014 23:10:11 +0000 Subject: fixed remote socket resolving --- src/udp.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/udp.c b/src/udp.c index 9054f10..44bd814 100644 --- a/src/udp.c +++ b/src/udp.c @@ -236,20 +236,27 @@ int udp_resolv_remote(udp_t* sock, const char* remote_addr, const char* port, re return -1; } - if(!sock->active_sock_) { - udp_socket_t* s = sock->socks_; - while(s) { - if(s->local_end_.addr_.ss_family == res->ai_family) { - sock->active_sock_ = s; - break; + struct addrinfo* r = res; + while(r) { + if(!sock->active_sock_) { + udp_socket_t* s = sock->socks_; + while(s) { + if(s->local_end_.addr_.ss_family == r->ai_family) { + sock->active_sock_ = s; + break; + } + s = s->next_; } - s = s->next_; } - } - if(sock->active_sock_) { - memcpy(&(sock->active_sock_->remote_end_.addr_), res->ai_addr, res->ai_addrlen); - sock->active_sock_->remote_end_.len_ = res->ai_addrlen; - sock->active_sock_->remote_end_set_ = 1; + + if(sock->active_sock_) { + memcpy(&(sock->active_sock_->remote_end_.addr_), r->ai_addr, r->ai_addrlen); + sock->active_sock_->remote_end_.len_ = r->ai_addrlen; + sock->active_sock_->remote_end_set_ = 1; + break; + } + + r = r->ai_next; } freeaddrinfo(res); @@ -332,7 +339,7 @@ char* udp_endpoint_to_string(udp_endpoint_t* e) char* udp_get_remote_end_string(udp_t* sock) { - if(!sock || !sock->active_sock_ || !sock->active_sock_->remote_end_set_) + if(!sock || !(sock->active_sock_) || !(sock->active_sock_->remote_end_set_)) return NULL; return udp_endpoint_to_string(&(sock->active_sock_->remote_end_)); -- cgit v1.2.3