C 如何以原子方式发送()缓冲区,使其不被部分调度?

C 如何以原子方式发送()缓冲区,使其不被部分调度?,c,sockets,tcp,send,bsd,C,Sockets,Tcp,Send,Bsd,目前我有一个问题,如果我发送一个缓冲区,它可能只是部分发送,并返回发送的字节数。是否有任何方法可以设置一些选项或某物来阻止bsd套接字部分发送?通常,对于SOCK\u流套接字类型(如TCP),无法做到这一点SOCK_数据报(对于IP,这意味着UDP)和SOCK_SEQPACKET(对于IP,没有这样的事情)可以做您想要做的事情,但有自己的不同限制 在任何情况下,解决方案都是您需要自己进行数据缓冲和帧处理。也就是说,您需要在发送的流中包含带内信息,以允许收件人重建您想要的“数据包”边界。您可以尝试

目前我有一个问题,如果我发送一个缓冲区,它可能只是部分发送,并返回发送的字节数。是否有任何方法可以设置一些选项或某物来阻止bsd套接字部分发送?

通常,对于
SOCK\u流
套接字类型(如TCP),无法做到这一点
SOCK_数据报(对于IP,这意味着UDP)和
SOCK_SEQPACKET
(对于IP,没有这样的事情)可以做您想要做的事情,但有自己的不同限制


在任何情况下,解决方案都是您需要自己进行数据缓冲和帧处理。也就是说,您需要在发送的流中包含带内信息,以允许收件人重建您想要的“数据包”边界。

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