簡體   English   中英

在 read() 之前檢查 boost::asio 緩沖區數據是否存在

[英]Check if boost::asio buffer data is present before read()

我正在嘗試將我使用 Unix sockets 編寫的軟件移植到使用 TCP ZFFE33A3F6E35505FABA.io 的版本:boost:7FDas.io 該程序旨在在 Linux 機器上運行。

在代碼的早期版本中(使用 Unix 套接字),我使用了一個簡單的檢查來查看套接字緩沖區中是否有新數據,然后繼續讀取可預測的結構化數據:

    ioctl(s_c, FIONREAD, &socketstatus);
    while (socketstatus > 0)
    {// do receive stuff
    ioctl(s_c, FIONREAD, &socketstatus);}

有沒有辦法用 boost::asio 做類似的事情? 或者一些更好的選擇?

提前謝謝你 CB

使用bytes_readable ,這實現了你想要的。

實現 FIONREAD IO 控制命令。

boost::asio::ip::tcp::socket socket(io_service); 
...
boost::asio::socket_base::bytes_readable command(true);
socket.io_control(command);
std::size_t bytes_readable = command.get();

您可以使用native() 方法boost::asio::ip::tcp::socket中提取本機描述符,該方法應該可以與您現有的代碼一起使用。

不過,我質疑你這樣做的動機。 Asio 事件反應器在Linux上使用epoll實現輪詢機制。 應該不需要在io_service事件循環之外輪詢套接字以進行讀取或寫入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM