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