UDP sendto пакет отправил сигнал

Я разрабатываю приложение, которое отправляет много сообщений по UDP-соединению.

Иногда некоторые пакеты терялись, и после некоторых тестов я делаю вывод, что сокет был занят.

Таким образом, я помещаю крошечный сон между вызовами sendto API, пытаясь предотвратить новую отправку до того, как завершится последняя.

Это сработало, но я хочу использовать лучший подход, например обработать сигнал или что-то еще, что указывает мне, что предыдущая отправка была сделана.

Есть что-нибудь подобное?

Я использую язык C ++ в среде Linux.

Приведенный ниже фрагмент кода показывает, что я делаю:

#define MAX_SIZE 4096
string long_msg = GetLongMessage();

if (!long_msg.empty()) {
long int to_send = long_msg.size();
while (to_send) {
long int ret = sendto(socket_fd,
&long_msg[long_msg.size() - to_send],
(to_send > MAX_SIZE ? MAX_SIZE : to_send), 0,
reinterpret_cast<struct sockaddr*>(&addr_client),
addr_client_len);
if (ret > 0) {
to_send -= ret;
sleep(10);
} else {
// Log error
}
}
}

Изменить: Цель этого вопроса состоит в том, чтобы узнать, как определить, занят ли сокет UDP из-за предыдущего вызова отправки, и не обсуждать преимущества и недостатки TCP и UDP.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]