最近在csapp上看到read和write socket时
内部缓冲约束和较长的网络延时会引起read和write返回不足值,对linux管道调用read和write时,也可能出现不足值。
在网上查询了一下原因,stackoverflow上的这个解释感觉比较有道理
这个人遇到的问题是,用python的时候,如果只是传输小数据(1000字节),read会得到正确的结果,但是如果传输比较大的数据,例如9500字节,最后只能得到1000多的数据。
解释👇
TCP是面向字节流的协议,数据以字节的形式进行传输,长度取决于诸多因素,是没办法一次性读取32767个字节的。用recv的唯一保证是,每次都至少能读取到1字节or最多你指定的字节数目(也就是说recv的参数只是限制了我们读取的最大值,没有保证我们能一次性读到这么多
所以要在代码层面做修改,也就是说,要多次调用recv,直到读取到我们所需的所有数据。