【问题标题】:Difference between boost async_write() and non_blocking socket.send()boost async_write() 和 non_blocking socket.send() 之间的区别
【发布时间】:2016-02-28 10:32:12
【问题描述】:

'因为我们可以通过它的成员函数non_blocking(true)将一个套接字设置为非阻塞状态。

async_write(socket, buffer) 和 non_blocking socket.send(buffer) 有什么区别吗?

多个socket.send(buffer) 是否会像async_write(socket, buffer) 一样导致无序数据传输?

【问题讨论】:

    标签: c++ sockets boost boost-asio


    【解决方案1】:

    send 不保证所有数据都已写入套接字。您应该检查“字节写入”返回值、错误代码等。另一方面,async_write 将尝试发送,直到所有数据都发送完毕或发生错误。

    来自ip::tcp::send手册的备注:

    发送操作可能不会将所有数据传输到对等方。 如果您需要确保所有数据都被写入,请考虑使用写入功能 在阻塞操作完成之前写入。

    【讨论】:

    • 谢谢。多个socket.send(buffer) 是否会导致乱序数据传输,就像async_write(socket, buffer) 一样?
    • @StephenW 不,send 不能这样做,因为它的一步法和async_write 不是。注意send 无论如何都可以这样做,如果你忽略它的返回值 =)
    • 即使send也是一步法,既然我们将socket设置为非阻塞状态,那么send会不会变成非阻塞函数呢?因此我们可能会调用多个sends,从而导致乱序交付。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多