pythonsocketrecv阻塞?

在Python中,socket可以分为阻塞和非阻塞两种类型。设置方式可以通过setsockopt、setblocking或者settimeout实现。阻塞型socket的recv遵循规则:缓冲区有数据时立即返回所有数据;缓冲区无数据时,阻塞至有数据。而非阻塞型socket的recv遵循规则:缓冲区有数据时立即返回所有数据;缓冲区无数据时产生EAGAIN错误并返...
pythonsocketrecv阻塞?
在Python中,socket可以分为阻塞和非阻塞两种类型。设置方式可以通过setsockopt、setblocking或者settimeout实现。阻塞型socket的recv遵循规则:缓冲区有数据时立即返回所有数据;缓冲区无数据时,阻塞至有数据。而非阻塞型socket的recv遵循规则:缓冲区有数据时立即返回所有数据;缓冲区无数据时产生EAGAIN错误并返回(在Python中表现为异常)。两种情况下都不会返回空字符串,返回空数据的结果是对方关闭连接后才会出现。

由于TCP socket是一个流,所以不存在"读完了对方发送的数据"这一概念。每次读取数据后,需根据数据本身判断是否已收到全部所需数据,以决定是否执行下一个recv操作。

以hiredis库的接口设计为例,该库中的Reader包含两个接口:feed和gets。feed接口用于输入部分数据,无需确保数据分片正确;gets接口返回已获取的完整结果,若返回False表示无新结果。TCP socket编程通常遵循此方法:读取新数据;判断是否存在完整新消息;处理新消息或等待更多数据。2024-11-20
mengvlog 阅读 131 次 更新于 2025-12-20 01:39:26 我来答关注问题0
檬味博客在线解答立即免费咨询

编程相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部