socket编程中套接字缓冲区大小的问题
一直对socket编程中的套接字缓冲区的大小等有关知识感觉很模糊,今天在网上看到这么一段话:
“如果套接字sockfd的发送缓冲区中没有数据或者数据被协议成功发送完毕后,recv先检查套接字sockfd的接收缓冲区,如果sockfd的接收缓冲区中没有数据或者协议正在接收数据,那么recv就一起等待,直到把数据接收完毕。当协议把数据接收完毕,recv函数就把s的接收缓冲区中的数据copy到buff中(注意协议接收到的数据可能大于buff的长度,所以在这种情况下要调用几次recv函数才能把sockfd的接收缓冲区中的数据copy完。recv函数仅仅是copy数据,真正的接收数据是协议来完成的)”
recv函数:ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);
这段话中提到协议接收到的数据如果大于buff的长度,就需要调用多次recv才能把接收缓冲区的数据copy完,但如果我们要recv的数据长度nbytes大于缓冲区的长度(也就是协议接收到的数据)时,那么recv又该怎么做?