Я пытаюсь изменить iperf для поддержки другого протокола (UDT).API UDT написан так, что он отражает стандартные вызовы BSD:
socket(...);
bind(...);
listen(...);
Что мне нужно сделать, это условно связать с библиотекой UDT, так что эти вызовы в iperf будут использовать код UDT вместоинтерфейс сокета к стеку TCP.Можно ли это сделать?Я всегда мог просто загрузить библиотеку и иметь другой условный путь, используя пространство имен UDT ::, но было бы 1) много дублирования из пути TCP и 2) было бы много изменений там, где, возможно, не должно быть ни одного.Пожалуйста, дайте мне знать, если мне неясно, приветствуются любые предложения о том, как добиться этого динамического связывания.
Редактировать:
Используя семейство dlopen (), упомянутое ниже, я мог быследующий программный поток:
Анализ параметров строки cmd -> если запрашивается UDT, загрузить библиотеку libudt -> get и сохранить дескрипторы для всех функций UDT BSD (bind, listen и т. д.)
На данный момент у меня есть указатели функций, хранящиеся со всеми моими функциями UDT.Допустим, я храню их все в структуре с именем udt_calls.Теперь у меня есть проблема с существующим кодом, который просто делает вызовы вроде:
bind(...)
вместо:
udt_calls->bind(...)
Есть ли чистый способ, которым я могу глобально переопределить любой вызов BSD на протяжениипрограмма с моими теперь загруженными указателями на функции в моей структуре udt_calls?