接受,发送缓冲区问题【c++】[

来源:百度知道 编辑:UC知道 时间:2024/06/04 19:54:50
First:我通过setsockopt把服务端接收缓冲区的大小设置为4个字节
然后服务端用 nReadLen = recv(s, buf , 6, 0); 接受数据

彼方*(客户端)发送“helloo” ,服务端 nReadLen 返回为为6 !

我已经把服务端接收缓冲区设置为4个字节了。为什么
服务端还可以一次性接受6个字节

Second:我通过setsockopt把客户端发送缓冲区的大小设置为4个字节
然后服务端用 nReadLen = send(s, buf , 6, 0); 发送“helloo”
nReadLen 就返回为为6 !既然我已经把客户端发送缓冲区设置为4个字节了。
为什么
客户端还可以一次性发送6个字节

p.s.: 两个问题没有关联性,既在第一个问题中并未设置客户端的发送缓冲区
第二个问题中并未设置服务端接收缓冲区

setsockopt设置的石sock的缓冲区
recv/send中的6设置的是系统缓冲区
sock当sock缓冲区满了的时候,会把数据存到系统缓冲去,然后再清空sock缓冲区,存入下一个报文
sock缓冲小于系统缓冲区的时候,就分多次把数据存入系统缓冲去里
以上是个人理解

recv(s, buf , 6, 0);
这里的6我记得是buf的size哦