关于winsock的recv()函数
stoat 2008-08-05 05:15:30 前提:建立了一个TCP连接,并发出了请求,现在接收数据。使用winsock,不使用封装socket的类。
问题一:一个TCP包的大小大于系统缓存,这种情况会怎样?
比如:系统输入缓冲区(recv()从该系统缓冲中去数据)大小为1024字节,有一个1524字节的tcp包发了过来。会发生什么事?
问题二:程序中的缓存比较小。
比如:系统输入缓冲区大小为1024字节,程序中的缓存(recv()将数据读到该缓存中)只有300字节。有一个500字节的tcp包发了过来,并进入了系统缓存。接着,recv()从系统缓存中读300字节的数据到程序缓存中,并将这些数据从系统缓存中删除,系统缓存中就剩下200字节的数据。这时,又来了一个500字节的tcp包,这个包会进入系统缓存么?此时调用recv()会将700字节(200+500)的数据一起读入程序缓存么?还是先读200字节,再次调用recv()时才读剩下的500字节。