【问题标题】:How to send() buffers atomically, so that they are not dispatched partial?如何以原子方式发送()缓冲区,以便它们不会被部分分派?
【发布时间】:2013-10-04 23:26:20
【问题描述】:

目前我遇到了一个问题,如果我发送一个缓冲区,它可能只发送部分并返回发送的字节数。有没有办法设置一些选项或某事。防止bsd套接字部分发送?

【问题讨论】:

  • 你可以试试 TCP corking。 UDP 应该总是发送完整的数据报。
  • 我相信软木塞只是一个提示。它当然不能阻止所有的部分发送。

标签: c sockets tcp send bsd


【解决方案1】:

一般情况下,使用SOCK_STREAM 套接字类型(例如 TCP)无法做到这一点。 SOCK_DATAGRAM(对于 IP,这意味着 UDP)和 SOCK_SEQPACKET(对于 IP,没有这样的东西)会做你想做的事,但有不同的限制。

无论如何,解决方案是您需要自己进行数据缓冲和成帧。也就是说,您需要在发送的流中包含带内信息,以使接收者能够重建您想要的“数据包”边界。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多