diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2013-02-04 15:40:56 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2013-02-04 15:40:56 +0000 |
commit | 9f5dbc004450cbd34644380fb2f7d3972504f0bd (patch) | |
tree | 5a3eb9318f0b5123cadcb5b411a4d69140748dd2 /src/transport/gnunet-service-transport.c | |
parent | 9b591a03f71042c8b00f9ba55c303d738a0c2363 (diff) | |
download | gnunet-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.c | 35 |
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 | } |