如何以原子方式发送()缓冲区,以便它们不会被部分分派?
Posted
技术标签:
【中文标题】如何以原子方式发送()缓冲区,以便它们不会被部分分派?【英文标题】:How to send() buffers atomically, so that they are not dispatched partial? 【发布时间】:2013-10-04 23:26:20 【问题描述】:目前我遇到了一个问题,如果我发送一个缓冲区,它可能只发送部分并返回发送的字节数。有没有办法设置一些选项或某事。防止bsd套接字部分发送?
【问题讨论】:
你可以试试 TCP corking。 UDP 应该总是发送完整的数据报。 我相信软木塞只是一个提示。它当然不能阻止所有的部分发送。 【参考方案1】:一般情况下,使用SOCK_STREAM
套接字类型(例如 TCP)无法做到这一点。 SOCK_DATAGRAM
(对于 IP,这意味着 UDP)和 SOCK_SEQPACKET
(对于 IP,没有这样的东西)会做你想做的事,但有不同的限制。
无论如何,解决方案是您需要自己进行数据缓冲和成帧。也就是说,您需要在发送的流中包含带内信息,以使接收者能够重建您想要的“数据包”边界。
【讨论】:
以上是关于如何以原子方式发送()缓冲区,以便它们不会被部分分派?的主要内容,如果未能解决你的问题,请参考以下文章