summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@anytun.org>2014-02-11 23:10:11 +0000
committerChristian Pointner <equinox@anytun.org>2014-02-11 23:10:11 +0000
commit381efd6da6e85fce4a30857aab729bea30d3e1e0 (patch)
treeb50a8c7b18e945d557cbc33f72661944e3036a4e
parentfixed memory error at udp_endpoint_to_string (diff)
fixed remote socket resolving
-rw-r--r--src/udp.c33
1 files changed, 20 insertions, 13 deletions
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_));