systemd и UDP-multicast
От: AlexGin Беларусь  
Дата: 10.05.21 10:34
Оценка:
Доброе время суток, уважаемые коллеги!

Я сделал сервис, работающий в Ubuntu 18.04, и активно использующий UDP протокол. Также сервис работает с PostgreSQL СУБД.

Для запуска данного сервиса в подсистеме запуска systemd — я сделал конфигурационный файл (tgosdservice.service):
[Unit]
Description=tgosd service
After=network.target
After=postgresql.service
Requires=postgresql.service

[Service]
Type=simple
Restart=always
RestartSec=1
ExecStart=/home/alexgin/tgosd/tgosd_service.sh

[Install]
WantedBy=multi-user.target


скрипт запуска моего приложения (исполнимый файл tgosd, сделан на C++ Qt5) выглядит так (файл tgosd_service.sh):
#!/bin/bash
# Start the: 'tgosd':
cd /home/alexgin/tgosd
/home/alexgin/tgosd/bin/tgosd


В каталоге /home/alexgin/tgosd — находятся конфикурационные *.ini файлы моего приложения,
поэтому и выполняю команду смены рабочего директория:

cd /home/alexgin/tgosd

Сервис успешно запускается, подключение к серверу PostgreSQL — также происходит нормально.

Данная методика описана в следующих источниках:
https://www.linode.com/docs/guides/start-service-at-boot
https://medium.com/@benmorel/creating-a-linux-service-with-systemd-611b5c8b91d6
https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

Есть только одна проблема — если IP адреса из multicast диапазона (IP 224.X.X.X) — подключение моего QUdpSocket
(через вызов bind) к ним вызывает ошибку.
Если адрес обычный (не multicast) — всё работает великолепно.
При этом, запуск приложения напрямую (как обычное приложение командной строки)
— никаких проблем с UDP-multicast также не выявляет.

Код вызова bind:
bool UdpLink::socketBind()
{
    if (!m_bUseMulticast)
    {
        return m_socket->bind(m_rxPort);
    }
    else
    {
        return (m_socket->bind(QHostAddress::AnyIPv4, m_rxPort, QUdpSocket::ShareAddress) &&
                    m_socket->joinMulticastGroup(m_groupAddress));
    }
}


Где m_socket

    QUdpSocket* m_socket;


Вопрос — куда копать, как подружить systemd и UDP-multicast?

Заранее благодарен за подсказки!
Отредактировано 10.05.2021 20:00 AlexGin . Предыдущая версия . Еще …
Отредактировано 10.05.2021 19:56 AlexGin . Предыдущая версия .
Отредактировано 10.05.2021 10:35 AlexGin . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.