diff --git a/fanout.c b/fanout.c index 151df5b4f2c1f0162fd52c7fc007e6e7321287b3..53ca424760589a4cd2908729568be74ae39bf5aa 100644 --- a/fanout.c +++ b/fanout.c @@ -99,6 +99,8 @@ u_int fd_limit = 0; int client_limit = -1; long server_start_time; +char ipstr[INET6_ADDRSTRLEN]; + //announcement stats unsigned long long announcements_count = 0; @@ -163,7 +165,7 @@ int main (int argc, char *argv[]) struct client *client_tmp = NULL; socklen_t clilen; - struct sockaddr_in serv_addr, cli_addr; + struct sockaddr_in6 serv_addr, cli_addr; static struct option long_options[] = { {"port", 1, 0, 0}, @@ -307,22 +309,20 @@ xit\n"); exit (EXIT_FAILURE); } - srvsock = socket (AF_INET, SOCK_STREAM, 0); + srvsock = socket (AF_INET6, SOCK_STREAM, 0); if (srvsock < 0) fanout_error ("ERROR opening socket"); bzero((char *) &serv_addr, sizeof (serv_addr)); - serv_addr.sin_family = AF_INET; - serv_addr.sin_addr.s_addr = INADDR_ANY; - serv_addr.sin_port = htons (portno); + serv_addr.sin6_family = AF_INET6; + serv_addr.sin6_addr = in6addr_any; + serv_addr.sin6_port = htons (portno); if ((setsockopt (srvsock, SOL_SOCKET, SO_REUSEADDR, &optval, optlen)) == -1) fanout_error ("failed setting reuseaddr"); if (bind (srvsock, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) < 0) - { fanout_error ("ERROR on binding"); - } if (listen (srvsock, listen_backlog) == -1) fanout_error ("ERROR listening on server socket"); @@ -519,8 +519,9 @@ resetting counter\n"); max_client_count = current_count; } + char *peer = getsocketpeername (client_i->fd); 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"); subscribe (client_i, "all"); @@ -694,12 +695,13 @@ void fanout_debug (int level, const char *format, ...) char *getsocketpeername (int fd) { - struct sockaddr_in m_addr; + struct sockaddr_in6 m_addr; socklen_t len; - len = sizeof m_addr; + 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) void remove_client (struct client *c) { + char *peer = getsocketpeername (c->fd); fanout_debug (3, "removing client %d connected from %s from service\n", - c->fd, getsocketpeername (c->fd)); + c->fd, peer); if (c->next != NULL) { c->next->previous = c->previous; }