【问题标题】:Determine amount of available bytes in socket确定套接字中可用字节的数量
【发布时间】:2017-05-25 09:10:51
【问题描述】:

我有一个boost::asio::ip::tcp::socket,想确定套接字是否包含可供读取的数据。我读到了available(),但是如果有可用数据,该函数有时也会返回0(以防它可以在没有阻塞的情况下读取)。可执行文件在 Ubuntu 上运行 - 也许系统调用会有所帮助?

【问题讨论】:

  • 如果没有数据可供读取,我会继续并稍后再查看。我知道 async_read 也可以解决这个问题,但是我已经有一个很大的轮询循环,所以如果有一种简单的方法可以检查可用字节,那将是完美的。
  • 反对票:你为什么反对票?我可以添加更多重要信息吗?
  • 正如你所说,我只需要知道套接字是否包含可读数据。有这样的功能吗?
  • 也许stackoverflow.com/q/12984816/1741542 会回答你的问题。

标签: c++ sockets ubuntu boost boost-asio


【解决方案1】:

由于您只需要知道套接字是否包含可读数据,因此只需从套接字发出您的常规非阻塞read。如果有数据,无论如何都需要读取,所以尝试读取即可。

如果您想避免read 的费用(如果没有可阅读的内容),请意识到您只是添加了一个额外的操作。检查是否有要读取的数据并不比尝试读取便宜很多。

当然,最好有一个待处理的async_read。这让 Boost 的反应堆发挥作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多