【发布时间】:2010-05-07 22:07:38
【问题描述】:
我的情况是这样的:我有一个 C# tcp 套接字,我通过它接收由 3 字节标头和可变大小有效负载组成的结构化消息。 tcp 数据通过隧道网络进行路由,有时容易受到碎片的影响。对此的解决方案是对标头执行 3 个字节的阻塞读取,对可变大小的有效负载执行 N 字节的阻塞读取(N 的值在标头中)。我遇到的问题是,阻塞接收操作偶尔会返回部分数据包。也就是说,它读取的字节量少于我在接收调用中明确设置的数量。经过一些调试,它返回的字节数似乎等于接收操作之前套接字的可用属性中的字节数。
这种行为出乎我的意料。如果套接字阻塞并且我明确设置了要接收的字节数,那么套接字不应该阻塞直到它接收到这些字节吗?任何帮助、指针等将不胜感激。
【问题讨论】: