[О блоге] [наверх] [пред] [2022-11-11 21:52:43+03:00] [cd14c3c1c7593ddb7095892a088d7b6034b0357e]
Темы: [bittorrent][bsd]

Улучшения dht-bootstrap

http://www.git.stargrave.org/?p=dht-bootstrap.git;a=summary
Всё не могу успокоиться играться с правкой dht-bootstrap демона
(aa2617fbedd389ae134e81f8b3461f495c8cb6ef).

* использование arc4random() (в GNU/Linux-ах можно getrandom())
  сокращает код, плюс не требует явной работы с файлами (чтения из
  /dev/urandom). Более того, в glibc arc4random уже тоже добавили
* состояние о количестве известных нод теперь "показываю" в названии
  процесса. И stdout/логи не загромождает, и посмотреть можно легко
* отладочный вывод показывает конкретные IP-адреса(+порты) всего
  происходящего
* закрываю лишние файлы, ограничиваю ресурсы rlimit-ом

Всё это ещё было портабельным. Но очень хотелось использовать Capsicum.
Обломался, так как посылка UDP пакета на адрес к которому прежде не было
connect-а -- невозможна в Capsicum, который ограничивает доступ к global
namespace, к которому относятся и IP-адреса. Сделал в итоге privilege
separated решение: отдельный процесс который занимается только отправкой
UDP пакетов, принимая данные из заранее связанного сокета. Основной же
демон, который принимает пакеты, парсит их -- под Capsicum sandbox-ом
работает.

А раз всё равно я это уже перевёл на FreeBSD из-за Capsicum, то и смысла
держать poll() нету. Перевёл на использование kqueue(). Происходит из-за
этого дополнительное копирование содержимого исходящих пакетов, для их
отсылки через сокет дочернему процессу -- но да и ладно, ибо нагрузка и
так смехотворная.

    [оставить комментарий]