阿维夫·科恩(Aviv Cohn)
假设我已使用连接到服务器socket
。我打电话了sock.recv(1000)
,但是服务器只给我发送了500个字节。
在我的实验中,sock.recv
收到500个字节后返回。
但是,情况总是如此吗?
或者sock.recv
,如果传递给它的参数大于它将收到的字节数,是否有可能继续等待呢?
巴尔玛
从文档中:
一次可接收的最大数据量由指定bufsize
。
这是允许的最大值,不是等待的数量。
有一个可选flags
参数,其含义与Unixrecv(2)
系统调用的含义相同。值之一是:
MSG_WAITALL(从Linux 2.2开始)
此标志请求操作块,直到满足完整请求为止。但是,如果捕获到信号,发生错误或断开连接,或者下一个要接收的数据与返回的数据类型不同,则呼叫返回的数据仍可能比请求的少。该标志对数据报套接字无效。
因此,如果使用此选项,除非先关闭连接,否则它将一直等到接收到1000个字节。
如果没有该选项,它将等待,直到有任何可用的内容,然后将其返回,直到bufsize
指定的数量为止。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
编辑于
我来说两句