Sockets 当接收到部分数据时,是否有可能返回块

Sockets 当接收到部分数据时,是否有可能返回块,sockets,nonblocking,Sockets,Nonblocking,从套接字读取时,如果返回EWoldblock..是否可能只读取部分数据? 或者,当返回EWoldblock时,读取的数据是0 从套接字读取时,如果返回EWoldblock eWoldBlock在没有数据可用时返回 …是否可能只读取部分数据 没有 或者,当返回EWoldblock时,读取的数据是0 eWoldBlock在无阻塞的情况下没有可用数据时返回。从O_非阻塞套接字读取时,recv将返回-1,如果没有可用数据,则设置eWoldBlock或EAGAIN 是否可能只读取部分数据 是:呼叫recv

从套接字读取时,如果返回EWoldblock..是否可能只读取部分数据? 或者,当返回EWoldblock时,读取的数据是0

从套接字读取时,如果返回EWoldblock

eWoldBlock
在没有数据可用时返回

…是否可能只读取部分数据

没有

或者,当返回EWoldblock时,读取的数据是0


eWoldBlock
在无阻塞的情况下没有可用数据时返回。

从O_非阻塞套接字读取时,recv将返回-1,如果没有可用数据,则设置eWoldBlock或EAGAIN

是否可能只读取部分数据

是:呼叫recv将返回当前可用的尽可能多的信息-不超过请求的金额

您还应该查看recv的标志,特别是MSG_WAITALL和MSG_PEEK


如果recv返回0,则表示套接字已在对等端正确关闭,并且没有挂起的数据。

如果出现eWoldBlock,则根本没有读取数据:不可能存在“部分数据”。相反,如果读取了任何数据,则不会发生EWOOLDLOCK。是的,您是对的。我明白OP想问的是:如果我请求1000字节,但只有500字节可用,会发生什么?recv返回什么?我说的是,它返回的数据量与请求的数据量相同,如果没有可用的数据,则返回eWoldBlock。recv()返回500。问题不在于部分阅读。问题是“如果返回了eWoldBlock。。。是否可能只返回部分数据?答案是“否”。不是“是”。