UDP sendto包发送信号

时间:2016-06-29 13:47:24

标签: c++ linux udp signals sendto

我正在开发一个通过UDP连接发送大量消息的应用程序。

有时一些数据包丢失,经过一些测试后我得出结论说套接字很忙。

因此,我在调用sendto API之间进行了一次小小的睡眠,试图在最后一次发送之前阻止新的发送。

它有效,但我想使用更好的方法,比如处理信号或其他一些指向我之前发送的信号。

有类似的吗?

我在Linux环境中使用C ++语言。

以下代码段显示了我正在做的事情:

#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的优缺点。

0 个答案:

没有答案