Skip to content
Snippets Groups Projects
Commit a3db15fd authored by Travis Glenn Hansen's avatar Travis Glenn Hansen
Browse files

adding mandatory ipv6 support

parent 80521ccc
No related branches found
No related tags found
No related merge requests found
...@@ -99,6 +99,8 @@ u_int fd_limit = 0; ...@@ -99,6 +99,8 @@ u_int fd_limit = 0;
int client_limit = -1; int client_limit = -1;
long server_start_time; long server_start_time;
char ipstr[INET6_ADDRSTRLEN];
//announcement stats //announcement stats
unsigned long long announcements_count = 0; unsigned long long announcements_count = 0;
...@@ -163,7 +165,7 @@ int main (int argc, char *argv[]) ...@@ -163,7 +165,7 @@ int main (int argc, char *argv[])
struct client *client_tmp = NULL; struct client *client_tmp = NULL;
socklen_t clilen; socklen_t clilen;
struct sockaddr_in serv_addr, cli_addr; struct sockaddr_in6 serv_addr, cli_addr;
static struct option long_options[] = { static struct option long_options[] = {
{"port", 1, 0, 0}, {"port", 1, 0, 0},
...@@ -307,22 +309,20 @@ xit\n"); ...@@ -307,22 +309,20 @@ xit\n");
exit (EXIT_FAILURE); exit (EXIT_FAILURE);
} }
srvsock = socket (AF_INET, SOCK_STREAM, 0); srvsock = socket (AF_INET6, SOCK_STREAM, 0);
if (srvsock < 0) if (srvsock < 0)
fanout_error ("ERROR opening socket"); fanout_error ("ERROR opening socket");
bzero((char *) &serv_addr, sizeof (serv_addr)); bzero((char *) &serv_addr, sizeof (serv_addr));
serv_addr.sin_family = AF_INET; serv_addr.sin6_family = AF_INET6;
serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin6_addr = in6addr_any;
serv_addr.sin_port = htons (portno); serv_addr.sin6_port = htons (portno);
if ((setsockopt (srvsock, SOL_SOCKET, SO_REUSEADDR, &optval, optlen)) == -1) if ((setsockopt (srvsock, SOL_SOCKET, SO_REUSEADDR, &optval, optlen)) == -1)
fanout_error ("failed setting reuseaddr"); fanout_error ("failed setting reuseaddr");
if (bind (srvsock, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) < 0) if (bind (srvsock, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) < 0)
{
fanout_error ("ERROR on binding"); fanout_error ("ERROR on binding");
}
if (listen (srvsock, listen_backlog) == -1) if (listen (srvsock, listen_backlog) == -1)
fanout_error ("ERROR listening on server socket"); fanout_error ("ERROR listening on server socket");
...@@ -519,8 +519,9 @@ resetting counter\n"); ...@@ -519,8 +519,9 @@ resetting counter\n");
max_client_count = current_count; max_client_count = current_count;
} }
char *peer = getsocketpeername (client_i->fd);
fanout_debug (2, "client socket %d connected from %s\n", fanout_debug (2, "client socket %d connected from %s\n",
client_i->fd, getsocketpeername (client_i->fd)); client_i->fd, peer);
client_write (client_i, "debug!connected...\n"); client_write (client_i, "debug!connected...\n");
subscribe (client_i, "all"); subscribe (client_i, "all");
...@@ -694,12 +695,13 @@ void fanout_debug (int level, const char *format, ...) ...@@ -694,12 +695,13 @@ void fanout_debug (int level, const char *format, ...)
char *getsocketpeername (int fd) char *getsocketpeername (int fd)
{ {
struct sockaddr_in m_addr; struct sockaddr_in6 m_addr;
socklen_t len; socklen_t len;
len = sizeof m_addr; len = sizeof m_addr;
getpeername(fd, (struct sockaddr*)&m_addr, &len); getpeername(fd, (struct sockaddr*)&m_addr, &len);
return inet_ntoa(m_addr.sin_addr); inet_ntop(AF_INET6, &m_addr.sin6_addr, ipstr, sizeof ipstr);
return ipstr;
} }
...@@ -799,8 +801,9 @@ struct client *get_client (int fd) ...@@ -799,8 +801,9 @@ struct client *get_client (int fd)
void remove_client (struct client *c) void remove_client (struct client *c)
{ {
char *peer = getsocketpeername (c->fd);
fanout_debug (3, "removing client %d connected from %s from service\n", fanout_debug (3, "removing client %d connected from %s from service\n",
c->fd, getsocketpeername (c->fd)); c->fd, peer);
if (c->next != NULL) { if (c->next != NULL) {
c->next->previous = c->previous; c->next->previous = c->previous;
} }
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment