summaryrefslogtreecommitdiff
path: root/src/listener.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/listener.c')
-rw-r--r--src/listener.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/listener.c b/src/listener.c
index 5e34c3d..0f7f937 100644
--- a/src/listener.c
+++ b/src/listener.c
@@ -101,15 +101,20 @@ int listener_add(listeners_t* list, const char* laddr, const char* lport, const
ret = -2;
break;
}
- memset(&(element->remote_end_), 0, sizeof(element->remote_end_));
- memcpy(&(element->remote_end_), re->ai_addr, re->ai_addrlen);
-
- memset(&(element->source_end_), 0, sizeof(element->source_end_));
- if(se) memcpy(&(element->source_end_), se->ai_addr, se->ai_addrlen);
- else element->source_end_.ss_family = AF_UNSPEC;
+ memset(&(element->remote_end_.addr_), 0, sizeof(element->remote_end_.addr_));
+ memcpy(&(element->remote_end_.addr_), re->ai_addr, re->ai_addrlen);
+ element->remote_end_.len_ = re->ai_addrlen;
+
+ memset(&(element->source_end_.addr_), 0, sizeof(element->source_end_.addr_));
+ if(se) {
+ memcpy(&(element->source_end_.addr_), se->ai_addr, se->ai_addrlen);
+ element->source_end_.len_ = se->ai_addrlen;
+ }
+ else element->source_end_.addr_.ss_family = AF_UNSPEC;
- memset(&(element->local_end_), 0, sizeof(element->local_end_));
- memcpy(&(element->local_end_), l->ai_addr, l->ai_addrlen);
+ memset(&(element->local_end_.addr_), 0, sizeof(element->local_end_.addr_));
+ memcpy(&(element->local_end_.addr_), l->ai_addr, l->ai_addrlen);
+ element->local_end_.len_ = l->ai_addrlen;
element->fd_ = socket(l->ai_family, SOCK_STREAM, 0);
if(element->fd_ < 0) {
@@ -249,7 +254,7 @@ int listener_handle_accept(listeners_t* list, clients_t* clients, fd_set* set)
if(rs) free(rs);
FD_CLR(l->fd_, set);
- clients_add(clients, new_client, &(l->remote_end_), &(l->source_end_));
+ clients_add(clients, new_client, l->remote_end_, l->source_end_);
}
tmp = tmp->next_;
}