aboutsummaryrefslogtreecommitdiff
path: root/src/transport/gnunet-service-transport.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2013-02-04 15:40:56 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2013-02-04 15:40:56 +0000
commit9f5dbc004450cbd34644380fb2f7d3972504f0bd (patch)
tree5a3eb9318f0b5123cadcb5b411a4d69140748dd2 /src/transport/gnunet-service-transport.c
parent9b591a03f71042c8b00f9ba55c303d738a0c2363 (diff)
downloadgnunet-9f5dbc004450cbd34644380fb2f7d3972504f0bd.tar.gz
gnunet-9f5dbc004450cbd34644380fb2f7d3972504f0bd.zip
throttling validations
Diffstat (limited to 'src/transport/gnunet-service-transport.c')
-rw-r--r--src/transport/gnunet-service-transport.c35
1 files changed, 33 insertions, 2 deletions
diff --git a/src/transport/gnunet-service-transport.c b/src/transport/gnunet-service-transport.c
index bb091fafc..9f60d03d7 100644
--- a/src/transport/gnunet-service-transport.c
+++ b/src/transport/gnunet-service-transport.c
@@ -601,6 +601,9 @@ key_generation_cb (void *cls,
601 const char *emsg) 601 const char *emsg)
602{ 602{
603 struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded tmp; 603 struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded tmp;
604 long long unsigned int max_fd_cfg;
605 int max_fd_rlimit;
606 int max_fd;
604 607
605 GST_keygen = NULL; 608 GST_keygen = NULL;
606 if (NULL == pk) 609 if (NULL == pk)
@@ -641,6 +644,33 @@ key_generation_cb (void *cls,
641 return; 644 return;
642 } 645 }
643 646
647 max_fd_rlimit = 0;
648 max_fd_cfg = 0;
649 max_fd = 0;
650#if HAVE_GETRLIMIT
651 struct rlimit r_file;
652 if (0 == getrlimit (RLIMIT_NOFILE, &r_file))
653 {
654 max_fd_rlimit = r_file.rlim_cur;
655 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
656 "Maximum number of open files was: %u/%u\n", r_file.rlim_cur,
657 r_file.rlim_max);
658 }
659 max_fd_rlimit = (9 * max_fd_rlimit) / 10; /* Keep 10% for rest of transport */
660#endif
661 GNUNET_CONFIGURATION_get_value_number (GST_cfg, "transport", "MAX_FD", &max_fd_cfg);
662
663 if (max_fd_cfg > max_fd_rlimit)
664 max_fd = max_fd_cfg;
665 else
666 max_fd = max_fd_rlimit;
667 if (max_fd < DEFAULT_MAX_FDS)
668 max_fd = DEFAULT_MAX_FDS;
669
670 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
671 "Limiting number of sockets to %u: validation %u, neighbors: %u\n",
672 max_fd, (max_fd / 3) , (max_fd / 3) * 2);
673
644 /* start subsystems */ 674 /* start subsystems */
645 GST_hello_start (&process_hello_update, NULL); 675 GST_hello_start (&process_hello_update, NULL);
646 GNUNET_assert (NULL != GST_hello_get()); 676 GNUNET_assert (NULL != GST_hello_get());
@@ -654,9 +684,10 @@ key_generation_cb (void *cls,
654 GST_neighbours_start (NULL, 684 GST_neighbours_start (NULL,
655 &neighbours_connect_notification, 685 &neighbours_connect_notification,
656 &neighbours_disconnect_notification, 686 &neighbours_disconnect_notification,
657 &neighbours_address_notification); 687 &neighbours_address_notification,
688 (max_fd / 3) * 2);
658 GST_clients_start (GST_server); 689 GST_clients_start (GST_server);
659 GST_validation_start (); 690 GST_validation_start ((max_fd / 3));
660 if (NULL != GST_server) 691 if (NULL != GST_server)
661 GNUNET_SERVER_resume (GST_server); 692 GNUNET_SERVER_resume (GST_server);
662} 693}