我一直想知道什么时候触发了 BeginRecieve 调用提供的回调。
- 是在它接收到缓冲区可以容纳的数据时吗?如果是这样 - 如果数据小于缓冲区怎么办)
- 是它收到一个 TCP/IP 数据包的时候吗?
- 是别的吗?
我发现了一个类似的问题,我将重复一遍,因为我不能说得更清楚:
现在所有文档都说,一旦“接收到数据”,就会调用 BeginReceive 中指定的回调。但这相当模糊:如果您不知道其他进程如何准确地提供数据,那么那个时刻究竟是什么时候?
一个标准是当状态对象中的缓冲区被填充到指定的缓冲区大小时,认为 BeginReceive() 已完成(因此调用了 callbask)。但是,如果“交付”过程以未知数量和不规则模式提供数据怎么办?例如,如果它首先连续发送 100 个字节,然后有 1 毫秒的时间间隔,然后是另外 200 个字节:BeginReceive 是否完成了 100 个字节的传入数据?还是300?
http://www.pcreview.co.uk/forums/exactly-beginreceive-socket-considered-completed-t2899270.html