当调用winsock中的recv函数并且没有收到所有数据时会发生什么?

时间:2012-04-10 23:19:43

标签: winapi winsock

从我读过的关于winsock的内容来看,recv倾向于在一次通话中不接收来自发件人的所有数据。当人们说这是他们的意思,例如,我从客户端发送300个字节并且我在服务器上调用recv,它可能在它的第一次调用时只能接收200个字节,并且缓冲区将填充这200个字节?最后100个字节会发生什么?

另外,假设缓冲区太小,比如512字节或者其他东西,客户端发送600.第一次recv调用会将缓冲区填满容量,然后只丢弃最后88字节吗?如果我再次使用不同的缓冲区调用recv,那么该缓冲区的前88个字节是其余的数据吗?

第三,如果一个和两个是真的,并且我在不同的缓冲区中收到整个数据包,我是否必须将它们拼接到一个缓冲区中以开始解析我的数据?

1 个答案:

答案 0 :(得分:3)

我在这里假设TCP。

  

是否有可能在第一次调用时只能接收200个字节,缓冲区将被这200个字节填充?

  

最后100个字节会发生什么?

下次你会收到它们。

  

另外,假设缓冲区太小,比如512字节或者其他东西,客户端发送600.第一次recv调用会将缓冲区填满容量,然后只丢弃最后88个字节吗?

没有

  

如果我再次使用不同的缓冲区调用recv,那么前88个字节是其余的数据吗?

  

第三,如果一个和两个是真的,并且我在不同的缓冲区中收到整个数据包,我是否必须将它们拼接到一个缓冲区中以开始解析我的数据?

这取决于你。您是否需要一个连续缓冲区中的数据?如果是的话,是的。