以前老在网上找别人说recv什么时候返回,要么说的很笼统,要么完全觉得不靠谱,最近还是自己做个试验分析一下吧:
测试1.
每次发送大小:1024
每次接收大小:32
结果:pack1
每send发送一个包,包中数据大小1024,带PUSH标志
每次接收满32后recv函数返回。
测试2.
每次发送大小:1024
每次接收大小:2048
结果:pack2
每send发送一个包,包中数据大小1024,带PUSH标志
每次接收满1024后recv函数返回。
测试3.
每次发送大小:20480
每次接收大小:10240
结果:pack3
每send发送两个包,包中数据大小为16384(TCP分片大小,建立连接时商定)与4096,仅最后一个包带PUSH标志
第一次接收满10240后recv函数返回
第二次接收6144后recv函数返回(6144+10240=16384)
第三次接收4096后recv函数返回
Recv >>> [1]10240:10240
Recv >>> [2]10240:6144
Recv >>> [3]10240:4096
Recv >>> [4]10240:10240
Recv >>> [5]10240:6144
Recv >>> [6]10240:4096
测试4.
每次发送大小:20480
每次接收大小:20480
结果:pack4
每send发送两个包,包中数据大小为16384(TCP分片大小,建立连接时商定)与4096,仅最后一个包带PUSH标志
第一次接收16384后recv函数返回
第二次接收4096后recv函数返回
Recv >>> [1]20480:16384
Recv >>> [2]20480:4096
Recv >>> [3]2048