Browse Source

Increase size of address storage for clients to store full inet6 name

master
Con Kolivas 9 years ago
parent
commit
e413e0e97b
  1. 14
      src/connector.c

14
src/connector.c

@ -45,7 +45,8 @@ struct client_instance {
client_instance_t *next; client_instance_t *next;
client_instance_t *prev; client_instance_t *prev;
struct sockaddr address; struct sockaddr_storage address_storage;
struct sockaddr *address;
char address_name[INET6_ADDRSTRLEN]; char address_name[INET6_ADDRSTRLEN];
/* Which serverurl is this instance connected to */ /* Which serverurl is this instance connected to */
@ -195,8 +196,9 @@ static int accept_client(cdata_t *cdata, const int epfd, const uint64_t server)
sockd = cdata->serverfd[server]; sockd = cdata->serverfd[server];
client = recruit_client(cdata); client = recruit_client(cdata);
client->server = server; client->server = server;
address_len = sizeof(client->address); client->address = (struct sockaddr *)&client->address_storage;
fd = accept(sockd, &client->address, &address_len); address_len = sizeof(client->address_storage);
fd = accept(sockd, client->address, &address_len);
if (unlikely(fd < 0)) { if (unlikely(fd < 0)) {
/* Handle these errors gracefully should we ever share this /* Handle these errors gracefully should we ever share this
* socket */ * socket */
@ -209,17 +211,17 @@ static int accept_client(cdata_t *cdata, const int epfd, const uint64_t server)
return -1; return -1;
} }
switch (client->address.sa_family) { switch (client->address->sa_family) {
const struct sockaddr_in *inet4_in; const struct sockaddr_in *inet4_in;
const struct sockaddr_in6 *inet6_in; const struct sockaddr_in6 *inet6_in;
case AF_INET: case AF_INET:
inet4_in = (struct sockaddr_in *)&client->address; inet4_in = (struct sockaddr_in *)client->address;
inet_ntop(AF_INET, &inet4_in->sin_addr, client->address_name, INET6_ADDRSTRLEN); inet_ntop(AF_INET, &inet4_in->sin_addr, client->address_name, INET6_ADDRSTRLEN);
port = htons(inet4_in->sin_port); port = htons(inet4_in->sin_port);
break; break;
case AF_INET6: case AF_INET6:
inet6_in = (struct sockaddr_in6 *)&client->address; inet6_in = (struct sockaddr_in6 *)client->address;
inet_ntop(AF_INET6, &inet6_in->sin6_addr, client->address_name, INET6_ADDRSTRLEN); inet_ntop(AF_INET6, &inet6_in->sin6_addr, client->address_name, INET6_ADDRSTRLEN);
port = htons(inet6_in->sin6_port); port = htons(inet6_in->sin6_port);
break; break;

Loading…
Cancel
Save